Python2.7Tkinter:如何单击&;在两个小部件上发布并从两个小部件上获得响应?
我希望您能帮助我解决python 2.7中的一个问题。我无法在网上找到解决方案,但我真的不确定要搜索什么关键字,所以如果这是多余的,我很抱歉 下面的代码就是我的问题的一个例子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.
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()
它可以工作!需要一些修改才能适合我的真实代码,但这种方法看起来很有前途。非常感谢。