Python包含Tkinter变量StringVar()
,BooleanVar()
等的类。这些类共享方法get()
,set(string)
和trace(mode, callback)
。作为callback
的第二个参数传递的trace(mode, callback)
函数传递了四个参数self, n, m, x
。
有关BooleanVar()
的示例,这些似乎是'', 'PYVAR0', 'w'
。
第三个参数x
似乎是触发跟踪的模式,在我的情况下,变量已更改。但是,第一个看似空字符串的变量是什么?什么是第二个,如果我不得不猜测我会说变量的内部名称?
答案 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的名称”。使用名称来区分变量,然后可以绑定相同的处理程序以跟踪对任意数量变量的更改,而不是为每个变量需要单独的处理程序。