如何在事件处理程序中访问外部对象?

时间:2010-04-18 02:28:16

标签: python user-interface events tkinter handler

正如标题所说,我正在Tkinter中的动作触发事件处理程序中抓取光标位置。

我想用位置更新现有标签小部件。但是,我不能为我的生活弄清楚如何在事件处理程序中编辑Label文本字段(或任何外部对象)。据我所知,事件是传递给处理程序的唯一参数,这意味着我无法传递标签对象。

如何访问处理程序之外的对象?

1 个答案:

答案 0 :(得分: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()