Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python2.7Tkinter:如何单击&;在两个小部件上发布并从两个小部件上获得响应?_Python_Python 2.7_Events_Tkinter_Bind - Fatal编程技术网

Python2.7Tkinter:如何单击&;在两个小部件上发布并从两个小部件上获得响应?

Python2.7Tkinter:如何单击&;在两个小部件上发布并从两个小部件上获得响应?,python,python-2.7,events,tkinter,bind,Python,Python 2.7,Events,Tkinter,Bind,我希望您能帮助我解决python 2.7中的一个问题。我无法在网上找到解决方案,但我真的不确定要搜索什么关键字,所以如果这是多余的,我很抱歉 下面的代码就是我的问题的一个例子 import Tkinter as tk root = tk.Tk() #Widgets. btn1 = tk.Label(root, text="btn1", bg="gray80") btn2 = tk.Label(root, text="btn2", bg="gray80") btn1.pack(side=tk.

我希望您能帮助我解决python 2.7中的一个问题。我无法在网上找到解决方案,但我真的不确定要搜索什么关键字,所以如果这是多余的,我很抱歉

下面的代码就是我的问题的一个例子

import Tkinter as tk

root = tk.Tk()

#Widgets.
btn1 = tk.Label(root, text="btn1", bg="gray80")
btn2 = tk.Label(root, text="btn2", bg="gray80")
btn1.pack(side=tk.TOP, fill=tk.X)
btn2.pack(side=tk.TOP, fill=tk.X)

#Widget events.
def onClick1(event):
    print "Clicked button 1."
def onRelease1(event):
    print "Released button 1."
def onClick2(event):
    print "Clicked button 2."
def onRelease2(event):
    print "Released button 2."

#Bindings.
btn1.bind("<Button-1>", onClick1, add="+")
btn1.bind("<ButtonRelease-1>", onRelease1, add="+")
btn2.bind("<Button-1>", onClick2, add="+")
btn2.bind("<ButtonRelease-1>", onRelease2, add="+")

root.mainloop()
将Tkinter作为tk导入
root=tk.tk()
#小部件。
btn1=tk.标签(根,text=“btn1”,bg=“gray80”)
btn2=tk.标签(根,text=“btn2”,bg=“gray80”)
btn1.包装(侧面=顶部,填充=顶部)
btn2.包装(侧面=顶部,填充=顶部)
#小部件事件。
def onClick1(事件):
打印“单击按钮1”
def onRelease1(事件):
打印“释放按钮1”
def onClick2(事件):
打印“单击按钮2”
def onRelease2(事件):
打印“释放按钮2”
#绑定。
btn1.bind(“,onClick1,add=“+”)
btn1.bind(“,onRelease1,add=“+”)
btn2.bind(“,onClick2,add=“+”)
btn2.bind(“,onRelease2,add=“+”)
root.mainloop()

每当我点击一个按钮(技术上是一个标签)并按住它时,它的onClick事件就会触发,但如果我将鼠标拖到另一个按钮上并释放它,我会得到与我点击的按钮相同的onRelease,而不是我当前鼠标悬停的标签的onRelease。这让我耽搁了一段时间,我不想放弃我的程序中我需要的全部功能,因此非常感谢任何帮助。

发布事件总是在获得新闻事件的同一个小部件上触发。在处理程序中,您可以询问tkinter光标下是什么小部件

例如:

import Tkinter as tk

root = tk.Tk()

btn1 = tk.Label(root, text="btn1", bg="gray80")
btn2 = tk.Label(root, text="btn2", bg="gray80")
btn1.pack(side=tk.TOP, fill=tk.X)
btn2.pack(side=tk.TOP, fill=tk.X)

def onRelease(event):
    x,y = event.widget.winfo_pointerxy()
    widget = event.widget.winfo_containing(x, y)
    print("widget:", widget.cget("text"))

btn1.bind("<ButtonRelease-1>", onRelease)
btn2.bind("<ButtonRelease-1>", onRelease)

root.mainloop()
将Tkinter作为tk导入
root=tk.tk()
btn1=tk.标签(根,text=“btn1”,bg=“gray80”)
btn2=tk.标签(根,text=“btn2”,bg=“gray80”)
btn1.包装(侧面=顶部,填充=顶部)
btn2.包装(侧面=顶部,填充=顶部)
def onRelease(事件):
x、 y=event.widget.winfo_pointerxy()
widget=event.widget.winfo_包含(x,y)
打印(“widget:”,widget.cget(“文本”))
btn1.bind(“,onRelease)
btn2.bind(“,onRelease)
root.mainloop()

它可以工作!需要一些修改才能适合我的真实代码,但这种方法看起来很有前途。非常感谢。