[英]is it possible to find the canvas shape clicked in a mouse button press event in tkinter?
我有一个 Tkinter canvas 并将鼠标按钮按下事件绑定到它。
我想知道我是否可以弄清楚当绑定到 canvas 时用户单击的特定形状:
def callback(event):
pass
canvas = Canvas(root, width=100, height=100)
canvas.create_rectangle(10,50,40,90, tags="tile")
canvas.bind("<Button-1>", callback)
我知道我可以将它绑定到矩形,问题是矩形上可能有另一个形状,然后单击事件不再起作用。
我正在考虑使用find_overlapping
方法:
def callback(event):
canvas.find_overlapping(event.x, event.y,event.x, event.y)
但想知道是否有更简单的方法?
您可以使用特殊物品标签current
参考cursor下的object。 根据官方文档:
标签电流由 Tk 自动管理; 它适用于当前项目,它是绘制区域覆盖鼠标 cursor 的 position 的最顶层项目(不同的项目类型以不同的方式对此进行解释;有关详细信息,请参阅单个项目类型文档)。 如果鼠标不在 canvas 小部件中或不在项目上,则没有项目具有当前标签。
这是一个简单的例子。 它绘制了一堆彩色矩形,然后在您单击它们时将颜色设置为白色。
import tkinter as tk
import random
def click_handler(event):
event.widget.itemconfigure("current", fill="white")
root = tk.Tk()
canvas = tk.Canvas(root, bg="bisque", width=400, height=400)
canvas.pack(fill="both", expand=True)
canvas.bind("<1>", click_handler)
for i in range(100):
x = random.randint(0, 350)
y = random.randint(0, 350)
color = random.choice(("red", "orange", "green", "blue"))
width = random.randint(25, 50)
height = random.randint(25, 50)
canvas.create_rectangle(x, y, x+width, y+height, fill=color)
root.mainloop()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.