修改自己的观察者回调中的TKINTER变量



我想我不太了解tkinter变量确实会通知观察者以及何时没有通知观察者。特别是,我不明白为什么以下示例仅调用f一次:

from tkinter import Tk, IntVar
Tk()
x = IntVar()
def f(*_):
   print("f called")
   x.set(1)
x.trace("w", f)
x.set(0)
print(x.get())

我希望它在一遍又一遍地打印f called时会永远发挥作用,或者在某个时候抛出异常。相反,它准确打印f called一次,打印1并退出。

每当更改值时,调用回调,在该回调中更改时。在回调时禁用迹线以防止无尽的递归环。

这在TraceMan页面中的规范TCL/TK文档中进行了描述。以下是简短的片段。在这种情况下,commandPrefix指的是您的回调:

虽然CommandPrefix在读取或写入跟踪期间执行,但变量上的踪迹暂时禁用。这意味着将直接发生由CommandPrefix引用和写入的读取和写入,而无需再次调用CommandPrefix(或任何其他痕迹(。但是,如果commandprefix unsets变量,则将调用未设置的轨迹。

最新更新