首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >tkinter canvas -从事件中提取对象id?

tkinter canvas -从事件中提取对象id?
EN

Stack Overflow用户
提问于 2019-02-17 17:08:30
回答 1查看 2.3K关注 0票数 2

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

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

代码语言:javascript
运行
复制
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

我有一些非常“老生常谈”的方法(跟踪鼠标,并向画布询问离鼠标最近的项目),但这似乎不是“最好”的方法。

有没有更好的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-17 17:59:43

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

代码语言:javascript
运行
复制
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上的简要说明

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54731677

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档