如何在事件处理器中访问外部对象?
正如标题所说,我在Tkinter中处理一个运动触发的事件时,想要获取光标的位置。
我想用这个位置来更新一个已经存在的标签(Label)控件。但是我怎么也搞不明白,如何在事件处理器里面修改这个标签的文本(或者说其他外部对象)。我了解到,事件处理器里只传入了一个事件参数,这意味着我不能把标签对象传进去。
我该如何在事件处理器外部访问这些对象呢?
1 个回答
3
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()