【发布时间】:2021-05-31 16:43:17
【问题描述】:
我想将多个处理程序绑定到使用 create_image 方法在画布上绘制的图像上的事件。 但只有一个处理程序在工作..第一个。
systemcanvas.tag_bind(image_id,'<ButtonRelease-1>',fun1)
systemcanvas.tag_bind(image_id, "<ButtonRelease-1>", fun2)
如何让这两个函数都绑定到图片上?
【问题讨论】:
我想将多个处理程序绑定到使用 create_image 方法在画布上绘制的图像上的事件。 但只有一个处理程序在工作..第一个。
systemcanvas.tag_bind(image_id,'<ButtonRelease-1>',fun1)
systemcanvas.tag_bind(image_id, "<ButtonRelease-1>", fun2)
如何让这两个函数都绑定到图片上?
【问题讨论】:
将事件绑定到小部件或画布项后,命令将被绑定,直到您取消绑定或覆盖它。您只需将新命令绑定到该项目或小部件即可覆盖它,以避免您可以添加可选参数add='+'。
import tkinter as tk
def test1(event):
print('test 1 is running')
def test2(event):
print('test 2 is running')
root = tk.Tk()
cnvs = tk.Canvas(root)
itm = cnvs.create_text(0,0, anchor='nw',text='default')
cnvs.tag_bind(itm,'<Button-1>', test1)
cnvs.tag_bind(itm,'<Button-1>', test2,add='+')
cnvs.pack()
root.mainloop()
如果脚本以“+”为前缀,则将其附加到任何现有的 序列绑定;否则脚本将替换任何现有的绑定。 如果 script 是一个空字符串,那么当前的序列绑定是 被破坏,留下未绑定的序列。在所有情况下 提供了 script 参数,bind 返回一个空字符串。
【讨论】:
add="+" 可以工作,但是根据tkinter 的源代码 "一个额外的布尔参数ADD 指定是否会在另一个绑定函数之外调用FUNC,或者是否会替换之前的函数。” 那不是说add 应该是True 而不是"+"?
tcl 的文档。 _tkinter 管理脚本名称/调用,所以我们应该查看 tkinter 的文档