gpt4 book ai didi

python-3.x - tkinter canvas - 从事件中提取对象 ID?

转载 作者:行者123 更新时间:2023-12-05 00:59:05 26 4
gpt4 key购买 nike

有没有办法从事件中提取 Canvas 对象的 id?

例如,我想将一个项目添加到 Canvas 并绑定(bind)到它 - 但如果我的 Canvas 上有多个项目,我需要区分它们。

def add_canvas_item(self,x,y):
canvas_item_id = self.canvas.create_oval(x-50,y-50,x+50,y+50, fill='green')
self.canvas.tag_bind(canvas_item_id ,"<ButtonPress-1>",self.stateClicked)

def itemClicked(self,event):
print("Item XYZ Clicked!") <- Where XYZ is the ID of the item

我有一些非常“hacky”的方法(跟踪鼠标,并在 Canvas 上询问离该点最近的项目),但这似乎不是“最好”的方法。

有没有更好的办法?

最佳答案

您可以使用 find_withtag() 函数返回点击的项目,如下例所示:

from tkinter import *

root = Tk()
canvas = Canvas(root)
canvas.pack()

def itemClicked(event):
canvas_item_id = event.widget.find_withtag('current')[0]
print('Item', canvas_item_id, 'Clicked!')

def add_canvas_item(x,y):
canvas_item_id = canvas.create_oval(x-50,y-50,x+50,y+50, fill='green')
canvas.tag_bind(canvas_item_id ,'<ButtonPress-1>', itemClicked)

add_canvas_item(100,100) # Test item 1
add_canvas_item(250,150) # Test item 2

root.mainloop()

Tracking Mouse Actions for Many Canvas Objects 上的简要说明

关于python-3.x - tkinter canvas - 从事件中提取对象 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54731677/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com