【问题标题】:How to access external object within event handler?如何在事件处理程序中访问外部对象?
【发布时间】:2011-02-09 07:01:41
【问题描述】:

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

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

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

【问题讨论】:

    标签: python user-interface events tkinter handler


    【解决方案1】:

    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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-02
      • 1970-01-01
      • 1970-01-01
      • 2014-07-18
      相关资源
      最近更新 更多