我正在尝试使用Tkinter在Python中编写一个非常简单的UI。我在StringVar
课上遇到了一个小问题。问题是,当我运行python脚本时,我在初始化StringVar
变量的行上得到一个错误。我已经写了一个关于这个问题的示例程序,我想让它工作:
from Tkinter import *
var = StringVar()
var.set('test');
当我在python中运行它时,我看到这个错误:
$ 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。
我认为您可能需要在调用StringVar之前显式调用Tk()。
就这样做:
from Tkinter import *
Tk() # Add this
var = StringVar()
var.set('test');
我自己从来没有用Tkinter做过任何事情,但是这里看起来这个StringVar类继承自一个基变量类,正如您可以在对Variable.__init__()
调用的回溯中看到的那样。异常是由语句"self"引发的。Tk = master.tk"。下面的错误消息表明这个"主"参数是NoneType,因此没有tk属性。查看StringVar的Tkinter文档:http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html
主参数默认为None。看起来master应该作为一个可能包含这个StringVar的小部件提供(也就是说,有一个StringVar不与小部件关联有意义吗?)我不得不说,您绝对需要将StringVar对象与小部件关联起来,以便它具有'tk'属性。