我有一个简单的程序,有些按钮不是由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::
但是有更短的路吗?谢谢!
答案 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自动管理;它适用于当前项目,这是最上面的项目,其绘制区域覆盖鼠标光标的位置(不同的项目类型以不同的方式解释它;有关详细信息,请参阅单个项目类型文档)。如果鼠标不在画布小部件中或不在项目上,则没有项目具有当前标记。