【问题标题】:tag_bind method of Canvas in TkinterTkinter 中 Canvas 的 tag_bind 方法
【发布时间】:2021-05-31 16:43:17
【问题描述】:

我想将多个处理程序绑定到使用 create_image 方法在画布上绘制的图像上的事件。 但只有一个处理程序在工作..第一个。

systemcanvas.tag_bind(image_id,'<ButtonRelease-1>',fun1)
systemcanvas.tag_bind(image_id, "<ButtonRelease-1>", fun2)

如何让这两个函数都绑定到图片上?

【问题讨论】:

    标签: python tkinter canvas


    【解决方案1】:

    将事件绑定到小部件或画布项后,命令将被绑定,直到您取消绑定或覆盖它。您只需将新命令绑定到该项目或小部件即可覆盖它,以避免您可以添加可选参数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 返回一个空字符串。

    Source

    【讨论】:

    • 我知道add="+" 可以工作,但是根据tkinter 的源代码 "一个额外的布尔参数ADD 指定是否会在另一个绑定函数之外调用FUNC,或者是否会替换之前的函数。” 那不是说add 应该是True 而不是"+"
    • 来自tcl 的文档。 _tkinter 管理脚本名称/调用,所以我们应该查看 tkinter 的文档
    • @TheLizzard 做你喜欢做的事。
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多