2011-09-16 79 views
2

以下Python 3代碼有一個標籤和一個Entry字段,它們都是用字符串(示例中的「垃圾」)正確初始化的。但是當第二個「導入」行被取消註釋以用新的主題小部件替換舊的Entry小部件時,標籤和輸入字段不會被初始化。以Python爲主題的tkinter:條目變量不會設置

任何線索爲什麼主題小部件初始化被破壞?


from tkinter import * 
# from tkinter.ttk import * 

class myApp: 
    def __init__(self, root): 
     v = StringVar() 
     v.set("junk") 

     label = Label(root, textvariable=v) 
     label.pack() 
     text_entry = Entry(root, textvariable=v) 
     text_entry.pack() 

root = Tk() 
root.title("MyApp") 
app = myApp(root) 
root.mainloop() 

回答

5

的問題是,v是一個局部變量。當它超出範圍(即:當__init__完成執行時),v正在垃圾收集。將v更改爲self.v並且問題消失。

爲什麼你看到ttk Entry小部件的問題,而不是標準問題,我不知道。我想其中一個對垃圾收集器更敏感,或者可能導入這兩個庫以某種方式更快地觸發垃圾收集器。無論如何,即使使用庫存小部件,您最終也會遇到某種問題,因爲v總是會最終得到垃圾回收。