如何查看单击哪个tkinter画布形状?

时间:2018-03-26 17:18:59

标签: python events canvas tkinter click

我有一个简单的程序,有些按钮不是由Tkinter自己制作的。我只是用canvas.create_rectangle和类似的东西制作它们。但问题是:按钮可以移动。我可以这样做:

if event.x > c.coords(button)[0] and event.y > c.coords(button)[1] \
and event.x < c.coords(button)[2] and event.y < c.coords(button)[3]:
    ::line of code::

但是有更短的路吗?谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用标记绑定:canvas.tag_bind(<tag>, '<1>', callback),只需将<tag>替换为按钮的项ID。这是一个例子:

import tkinter as tk

def on_click(event):
    print('click')
    canvas.move(button1, 10, 5)

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

button1 = canvas.create_rectangle(10, 10, 50, 50, fill='red')
canvas.tag_bind(button1, '<1>', on_click)

root.mainloop()

答案 1 :(得分:0)

您可以使用canvas标记current,它指定光标下的项目。来自官方的tcl / tk文档:

  

标签当前由Tk自动管理;它适用于当前项目,这是最上面的项目,其绘制区域覆盖鼠标光标的位置(不同的项目类型以不同的方式解释它;有关详细信息,请参阅单个项目类型文档)。如果鼠标不在画布小部件中或不在项目上,则没有项目具有当前标记。