4
正如標題所說,我抓住了Tkinter中一個運動觸發事件處理程序中的光標位置。如何在事件處理程序中訪問外部對象?
我想用位置更新現有的標籤小部件。然而,我不能在我的生活中弄清楚如何在事件處理程序中編輯Label
文本字段(或任何外部對象)。據我所知,事件是傳遞給處理程序的唯一參數,這意味着我無法傳遞標籤對象。
如何訪問處理程序外部的對象?
正如標題所說,我抓住了Tkinter中一個運動觸發事件處理程序中的光標位置。如何在事件處理程序中訪問外部對象?
我想用位置更新現有的標籤小部件。然而,我不能在我的生活中弄清楚如何在事件處理程序中編輯Label
文本字段(或任何外部對象)。據我所知,事件是傳遞給處理程序的唯一參數,這意味着我無法傳遞標籤對象。
如何訪問處理程序外部的對象?
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()
完成