2011-08-03 15 views
6

Tkinterを使用してPythonで非常に単純なUIを作成しようとしています。私はStringVarクラスで小さな問題に遭遇しました。問題は、Pythonスクリプトを実行すると、StringVar変数を初期化する行にエラーが発生します。私はこれがあると感じているPythonプログラムで 'StringVar'の問題

$ 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を介して実行すると

from Tkinter import * 

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

:私は、私が働いて取得したいと思い、この問題でのサンプルプログラムを書かれています私のPythonインストールの問題ですが、私は何か間違っているかもしれません?私は、違いがある場合は、Ubuntu LinuxでPythonバージョン2.6.5を使用しています。

答えて

10

StringVarを呼び出す前にTk()を明示的に呼び出す必要があると思います。

ちょうどこの操作を行います。あなたは明示的に `StringVar`オブジェクトを作成する前に、`)( `Tkのを呼び出す必要がありますなぜ

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

を? – nbro

1

Tkinter自身で何もしたことはありませんが、このStringVarクラスは、Variable.__init__()の呼び出しでトレースバックに表示されるように、基本のVariableクラスを継承しているようです。例外は "self.tk = master.tk"というステートメントで発生しました。次のエラーメッセージは、この "master"パラメータがNoneTypeであることを示しているため、このようなtk属性はありません。ここでStringVarのTkinterのドキュメントを見てください:http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html

masterパラメータは、デフォルトでNoneに設定されています。このStringVarを含む可能性のあるウィジェットとしてマスタを提供する必要があります(つまり、ウィジェットに関連付けられていないStringVarを持つことは理にかなっていますか?)。私はあなたが 'tk'属性を持つためには、StringVarオブジェクトをウィジェットに関連付ける必要があると言わなければなりません。