繁体   English   中英

是否可以在 tkinter 中找到在鼠标按钮按下事件中单击的 canvas 形状?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM