Tkinter变量定义,哪个更理想?

时间:2013-05-24 08:20:57

标签: python variables tkinter

我是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优先于另一个呢?

1 个答案:

答案 0 :(得分:3)

像StringVar这样的Tkinter变量通常用于跟踪其值的变化,或者将它们作为创建一些小部件的variabletextvariable选项传递。从您引用的页面“何时使用变量类”部分开始:

  

变量可与大多数条目小部件一起使用,以跟踪对输入值的更改。 Checkbutton和Radiobutton小部件需要变量才能正常工作。

     

变量也可用于验证条目窗口小部件的内容,以及更改标签窗口小部件中的文本。

所以在你的情况下,自然解决方案将是第二个:看起来你想要存储askopenfilename()的结果,就像你对另一个语句的结果一样,但是不要用它来与如果StringVar的值已更改,则窗口小部件或轨道的文本(因为您正在调用该函数,您已经知道它何时会更新)。