gpt4 book ai didi

python - 无法使用 tkinter 取消绑定(bind)函数

转载 作者:行者123 更新时间:2023-11-28 22:35:52 24 4
gpt4 key购买 nike

我在 Python 3.5 中使用 Tkinter,我遇到了一个奇怪的问题。

我使用了 tkinterbook about events and bindings写这个简单的例子:

from tkinter import *

root = Tk()

frame = Frame(root, width=100, height=100)

def callback(event):
print("clicked at", event.x, event.y)
# frame.unbind("<Button-1>", callback)

frame.bind("<Button-1>", callback)
frame.pack()

root.mainloop()

它工作正常,但如果我尝试取消绑定(bind)回调(只是取消注释该行),它会失败并出现以下错误:

Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\Delgan\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1549, in __call__
return self.func(*args)
File "C:\Users\Delgan\Desktop\Test\test.py", line 9, in callback
frame.unbind("<Button-1>", callback)
File "C:\Users\Delgan\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 1105, in unbind
self.deletecommand(funcid)
File "C:\Users\Delgan\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 441, in deletecommand
self.tk.deletecommand(name)
TypeError: deletecommand() argument must be str, not function

这还不清楚,我不确定这是 tkinter 中的错误还是我做错了什么。

frame.unbind("<Button-1>")工作正常,但我想删除这个确切的回调而不是全局删除。

最佳答案

unbind 的第二个参数是“funcid”,而不是函数。 help(root.unbind) 返回

unbind(sequence, funcid=None) method of tkinter.Tk instance. Unbind for this widget for event SEQUENCE the function identified with FUNCID.

许多 tk 函数返回可以作为其他函数参数的 tk 对象 ID,bind 就是其中之一。

>>> i = root.bind('<Button-1>', int)
>>> i
'1733092354312int'
>>> root.unbind('<Button-1>', i) # Specific binding removed.

隐藏在 help(root.bind) 的输出中是这样的:“Bind 将返回一个标识符,以允许在没有内存泄漏的情况下使用 unbind 删除绑定(bind)的函数。”

关于python - 无法使用 tkinter 取消绑定(bind)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37902503/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com