2011-08-03 450 views
6

我想在Python中使用Tkinter編寫非常簡單的用戶界面。我遇到了類StringVar的一個小問題。事情是,當我運行python腳本時,在初始化變量StringVar的行上出現錯誤。我寫這個問題的一個示例程序,我想獲得工作:在Python程序中使用'StringVar'問題

from Tkinter import * 

var = StringVar() 
var.set('test'); 

當我通過蟒蛇運行它,我看到這個錯誤:

$ python test.py 
Traceback (most recent call last): 
    File "test.py", line 3, in <module> 
    var = StringVar() 
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 254, in __init__ 
    Variable.__init__(self, master, value, name) 
    File "/usr/lib/python2.6/lib-tk/Tkinter.py", line 185, in __init__ 
    self._tk = master.tk 
AttributeError: 'NoneType' object has no attribute 'tk' 
Exception AttributeError: "StringVar instance has no attribute '_tk'" in <bound method StringVar.__del__ of <Tkinter.StringVar instance at 0xb73cc80c>> ignored 

我有一種感覺,這是一個問題與我的Python安裝,但它可能是我做錯了什麼?我在Ubuntu Linux上使用python版本2.6.5,如果這有所作爲。

回答

10

我想你可能需要在調用StringVar之前顯式調用Tk()。

只是這樣做:

from Tkinter import * 
Tk() # Add this 
var = StringVar() 
var.set('test'); 
+7

你爲什麼要叫'TK()'明確創建前的'StringVar'對象? – nbro

1

我從來沒有對Tkinter自己做過任何事情,但是在這裏它看起來像這個StringVar類繼承自一個基類變量類,正如您在追溯中看到的那樣,調用Variable.__init__()。聲明「self.tk = master.tk」引發了異常。下面的錯誤信息表明這個「主」參數是NoneType,因此不會有這樣的tk屬性。在這裏查看StringVar的Tkinter文檔:http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html

將主參數設置爲默認爲None。它看起來應該作爲一個可能包含這個StringVar的小部件來提供master(即將一個StringVar與一個小部件關聯起來是否合理?)。我不得不說,你肯定需要將一個StringVar對象與一個小部件關聯起來,才能擁有'tk'屬性。