我是Tkinter的新手,我想知道以下哪种设置变量更合适:
class App():
def __init__(self,master):
self.var1 = StringVar()
<filler>
def openFile(self,button_type):
name = tkFileDialog.askopenfilename()
if button_type == 1:
self.var1.set(name)
或
class App():
def __init__(self,master):
self.var1 = ""
<filler>
def openFile(self,button_type):
name = tkFileDialog.askopenfilename()
if button_type == 1:
self.var1 = name
第一个选项是我在effbot文档中找到的(http://effbot.org/tkinterbook/variable.htm),但第二个选项是我通常会做的。我最大的问题是为什么1优先于另一个呢?
答案 0 :(得分:3)
像StringVar这样的Tkinter变量通常用于跟踪其值的变化,或者将它们作为创建一些小部件的variable
或textvariable
选项传递。从您引用的页面“何时使用变量类”部分开始:
变量可与大多数条目小部件一起使用,以跟踪对输入值的更改。 Checkbutton和Radiobutton小部件需要变量才能正常工作。
变量也可用于验证条目窗口小部件的内容,以及更改标签窗口小部件中的文本。
所以在你的情况下,自然解决方案将是第二个:看起来你想要存储askopenfilename()
的结果,就像你对另一个语句的结果一样,但是不要用它来与如果StringVar的值已更改,则窗口小部件或轨道的文本(因为您正在调用该函数,您已经知道它何时会更新)。