【发布时间】:2018-02-14 01:09:30
【问题描述】:
我正在尝试使用跟踪回调来验证对一组组合框的输入,但我在回调中获得的参数只是内部名称的字符串表示形式。有没有办法获取对触发跟踪回调的实际变量的引用,或者使用 PY_VAR1 等内部名称获取变量的方法?
from Tkinter import *
import ttk
def validate(self, *args):
print(self)
print(self.get())
master = Tk()
cb1_var = StringVar()
cb2_var = StringVar()
cb1_var.trace('w', validate)
cb2_var.trace('w', validate)
cb1 = ttk.Combobox(master, textvariable=cb1_var)
cb2 = ttk.Combobox(master, textvariable=cb2_var)
cb1.grid(row=0, column=0, sticky='NW')
cb2.grid(row=1, column=0, sticky='NW')
mainloop()
尝试调用 self.get() 失败,因为 self 只是那个字符串表示,而不是实际的 StringVar。我不想为每个 StringVar 设置一个特定的回调,因为实际的界面有大约 30 个框,我都希望通过相同的标准进行验证。
【问题讨论】:
-
如果您有大约 30 个组合框和文本变量,为什么不使用集合类型?
-
问之前有没有研究过?我觉得我在过去一两周内回答了类似的问题。
-
是的。对不起,我没有找到你的答案。我遇到了一篇文章,解释了提供给 trace 的参数“是内部变量名。在 tkinter 上下文中或多或少没用,但对底层 tcl 解释器非常有用。”但似乎我应该能够使用它来获取实际的 StringVar,这就是我问的原因。