2010-04-18 82 views
4

正如標題所說,我抓住了Tkinter中一個運動觸發事件處理程序中的光標位置。如何在事件處理程序中訪問外部對象?

我想用位置更新現有的標籤小部件。然而,我不能在我的生活中弄清楚如何在事件處理程序中編輯Label文本字段(或任何外部對象)。據我所知,事件是傳遞給處理程序的唯一參數,這意味着我無法傳遞標籤對象。

如何訪問處理程序外部的對象?

回答

3

Tkinter不會傳遞事件處理函數中的對象,無論如何它會知道您感興趣的是哪個對象?

取而代之,您有責任訪問您希望從事件處理程序更新的對象,例如,你的事件處理程序可以是簡單的函數,它可以訪問全局對象,也可以是一個對象的方法,並可以通過自己訪問該對象。

下面是使用全局對象

的方式
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() 
完成
相關問題