Tkinter 变量跟踪方法回调的参数是什么?

What are the arguments to Tkinter variable trace method callbacks?

Python 有 类 用于 Tkinter 变量 StringVar()BooleanVar() 等。这些都共享方法 get()set(string)、和 trace(mode, callback)。作为第二个参数传递给 trace(mode, callback)callback 函数被传递了四个参数,self, n, m, x.

例如 BooleanVar() 这些似乎是 '', 'PYVAR0', 'w'

第三个参数 x 似乎是触发跟踪的模式,在我的例子中,变量已更改。但是,第一个看起来是空字符串的变量是什么?第二个是什么,如果我不得不猜测我会为变量说一些内部名称?

第一个参数是内部变量名。您可以使用此名称作为 tkinter getvarsetvar 方法的参数。如果你给你的变量一个名字(例如:StringVar(name='foo'))这将是给定的名字,否则它将是一个由 tkinter 为你生成的名字(例如:PYVAR0

如果第一个参数表示一个列表变量(在 tkinter 中极不可能),第二个参数 将是该列表的索引。如果它是标量变量,则第二个参数将为空字符串。

第三个参数是操作,如果你用同样的方法读、写and/or删除变量时很有用。此参数告诉您哪个操作触发了回调。它将是“读取”、“写入”或“取消设置”之一。

Tkinter 是 python 对 tcl/tk 解释器的封装。可以在此处找到有关变量跟踪的权威文档:http://tcl.tk/man/tcl8.5/TclCmd/trace.htm#M14。虽然,这仅记录了内部跟踪的工作方式,但 tkinter 包装器有时会处理数据。

第一个参数是变量的名称,但不是"useless",因为您可以在声明变量时设置它,例如:

someVar = IntVar(name="Name of someVar")

当您检查跟踪回调中的第一个参数时,它将等于 "Name of someVar"。使用名称来区分变量,然后您可以绑定相同的处理程序来跟踪对任意数量变量的更改,而不需要为每个变量使用单独的处理程序。