Python 2.7 Tkinter:如何单击并释放两个小部件并从两个小部件获得响应?
Python 2.7 Tkinter: how do I click & release on two widgets and get responses from both?
我希望你能帮助我解决我在 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()
每当我单击一个按钮(技术上是一个标签)并按住它时,它的 onClick 事件就会触发,但是如果我将鼠标拖到另一个按钮上并释放它,我会得到与我单击的按钮相同的 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()
我希望你能帮助我解决我在 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()
每当我单击一个按钮(技术上是一个标签)并按住它时,它的 onClick 事件就会触发,但是如果我将鼠标拖到另一个按钮上并释放它,我会得到与我单击的按钮相同的 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()