2016-04-27 120 views
0

我正在開發一個腳本,在閱讀python腳本後自動生成GUI。我在使構建的Entry對象接受默認值方面遇到問題。設置tkinter條目默認值

我通過我的方法包含一個默認值和變量名稱的字典(arg)。

def create_entry(self, 
       arg): 

    if 'default' in arg.keys(): 
     var = StringVar(value=arg['default']) 
    else: 
     var = StringVar() 
    box = ttk.Entry(self.mainframe, textvariable=var) 
    box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E)) 
    label= ttk.Label(self.mainframe, text=arg['name']).grid(column=0, row=self.num, sticky=E) 

    return box, label 

我無法解釋的事情是,用於查找目錄類似的方法工作得很好....

def create_askdirectory(self, 
         arg): 

    if 'default' in arg.keys(): 
     var = StringVar(value=arg['default']) 
    else: 
     var = StringVar() 
    box = ttk.Entry(self.mainframe, textvariable=var) 
    box.grid(column=1, row=self.num, columnspan=2, sticky=(W, E)) 

    def askdirectory(): 
     dirname = filedialog.askdirectory() 
     if dirname: 
      var.set(dirname) 

    button = ttk.Button(self.mainframe, text='directory', command=askdirectory).grid(column=0, row=self.num) 

    return box, button 
+0

整個'if..else'可能只是'var = StringVar(value = arg.get('default',''))''。 – TigerhawkT3

+0

更整潔,謝謝,但我仍然有同樣的問題... – WRJ

回答

1

TTK部件都是垃圾收集比Tkinter的部件更爲敏感。你的變量(你實際上並不需要)是局部變量,所以他們正在收集垃圾。

它在另一個代碼中起作用的原因是askdirectory函數位於create_askdirectory函數內部,因此它能夠看到本地變量。

我的建議是不是使用StringVar - 在這種情況下,他們是完全沒有必要的。

box = ttk.Entry(self.mainframe) 
box.insert(0, arg.get("default", "") 
+0

令人驚歎的,謝謝!只好把第一行砍到 box = ttk.Entry(self.mainframe) – WRJ