如果我正在使用画布显示数据并且我希望用户能够单击画布上的各种项目以获取更多信息或以某种方式与之交互,那么最好的方法是什么?
在线搜索我可以找到有关如何将事件绑定到标签的信息,但这似乎比我想要的更间接。我不想用标签对项目进行分组,而是在用户单击画布上的特定项目时进行特定的函数调用。
如果我正在使用画布显示数据并且我希望用户能够单击画布上的各种项目以获取更多信息或以某种方式与之交互,那么最好的方法是什么?
在线搜索我可以找到有关如何将事件绑定到标签的信息,但这似乎比我想要的更间接。我不想用标签对项目进行分组,而是在用户单击画布上的特定项目时进行特定的函数调用。
要与包含在对象中的Canvas
对象进行交互,您需要使用tag_bind()
具有以下格式的对象:tag_bind(item, event=None, callback=None, add=None)
item 参数可以是标签或 id。
下面是一个例子来说明这个概念:
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()