21
如果我使用畫布來顯示數據,並且我希望用戶能夠點擊畫布上的各種項目以獲取更多信息或以某種方式與之交互,那麼關於此操作的最佳方法是什麼?如何使用Tkinter將事件綁定附加到畫布上的項目?
在線搜索我可以找到有關如何將事件綁定到標記的信息,但似乎更接近我想要的。我不想用標籤對項目進行分組,而是在用戶單擊畫布上的特定項目時調用特定的函數。
如果我使用畫布來顯示數據,並且我希望用戶能夠點擊畫布上的各種項目以獲取更多信息或以某種方式與之交互,那麼關於此操作的最佳方法是什麼?如何使用Tkinter將事件綁定附加到畫布上的項目?
在線搜索我可以找到有關如何將事件綁定到標記的信息,但似乎更接近我想要的。我不想用標籤對項目進行分組,而是在用戶單擊畫布上的特定項目時調用特定的函數。
要包含在你需要使用tag_bind(一個Canvas對象的對象進行交互),它具有以下格式:tag_bind(item, event=None, callback, add=None)
項目參數可以是一個標籤或標識。
這裏是爲了說明的概念的一個示例:
from tkinter import *
def onObjectClick(event):
print('Got object click', event.x, event.y)
print(event.widget.find_closest(event.x, event.y))
root = Tk()
canv = Canvas(root, width=100, height=100)
obj1Id = canv.create_line(0, 30, 100, 30, width=5, tags="obj1Tag")
obj2Id = canv.create_text(50, 70, text='Click', tags='obj2Tag')
canv.tag_bind(obj1Id, '<ButtonPress-1>', onObjectClick)
canv.tag_bind('obj2Tag', '<ButtonPress-1>', onObjectClick)
print('obj1Id: ', obj1Id)
print('obj2Id: ', obj2Id)
canv.pack()
root.mainloop()
尼斯例子。我喜歡你如何顯示id和標籤的使用,並使用'obj1Id'和'obj1Tag'這樣的名字來驅動這個點。 – 2010-05-07 16:46:45