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

时间:2015-04-17 04:40:58

标签: python tkinter

Python包含Tkinter变量StringVar()BooleanVar()等的类。这些类共享方法get()set(string)trace(mode, callback)。作为callback的第二个参数传递的trace(mode, callback)函数传递了四个参数self, n, m, x

有关BooleanVar()的示例,这些似乎是'', 'PYVAR0', 'w'

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

2 个答案:

答案 0 :(得分:24)

第一个参数是内部变量名称。在tkinter上下文中或多或少没用,但对底层tcl解释器非常有用。

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

第三个参数是操作,如果您使用相同的方法读取,写入和/或删除变量,则非常有用。此参数告诉您哪个操作触发了回调。这将是" w"用于写操作(设置变量)和" r"用于读取操作(获取变量的值)。它将是" u"如果变量被删除("你"是&#34的缩写;未设置")

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

答案 1 :(得分:10)

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

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

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