正如标题所说,我在 Tkinter 的运动触发事件处理程序中抓取光标位置。
我想用该位置更新现有的标签小部件。但是,我一生都无法弄清楚如何Label
在事件处理程序中编辑文本字段(或任何外部对象)。据我了解,事件是传递给处理程序的唯一参数,这意味着我无法传递标签对象。
如何访问处理程序之外的对象?
正如标题所说,我在 Tkinter 的运动触发事件处理程序中抓取光标位置。
我想用该位置更新现有的标签小部件。但是,我一生都无法弄清楚如何Label
在事件处理程序中编辑文本字段(或任何外部对象)。据我了解,事件是传递给处理程序的唯一参数,这意味着我无法传递标签对象。
如何访问处理程序之外的对象?
Tkinter 不会在事件处理程序中传递对象,无论如何它如何知道您对哪个对象感兴趣?
相反,您有责任从事件处理程序访问您希望更新的对象,例如,您的事件处理程序可以是简单的函数,它可以访问全局对象,或者它可以是一个对象的方法,并且可以通过 self 访问该对象。
这是一种使用全局对象的方法
from Tkinter import *
root = Tk()
frame = Frame(root)
frame.configure(width=300,height=300)
def onmotion(event):
root.title("Mouse at %s,%s"%(event.x, event.y))
frame.bind("<Motion>", onmotion)
frame.pack()
root.title("Event test")
root.mainloop()
同样的事情可以以面向对象的方式完成
from Tkinter import *
class MyFrame(Frame):
def __init__(self, root):
Frame.__init__(self, root)
self.parent = root
self.configure(width=300,height=300)
self.pack()
self.bind("<Motion>", self.onmotion)
def onmotion(self, event):
self.parent.title("Mouse at %s,%s"%(event.x, event.y))
root = Tk()
frame = MyFrame(root)
root.title("Event test")
root.mainloop()