Python程序中的'StringVar'问题
我正在用Python的Tkinter库写一个非常简单的用户界面。可是我遇到了一个小问题,跟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,不知道这有没有影响。
2 个回答
1
我自己从来没有用过Tkinter,但从这里看,StringVar这个类是从一个叫Variable的基础类继承来的,正如在错误追踪中看到的对Variable.__init__()
的调用。错误是在执行“self.tk = master.tk”这行代码时出现的。后面的错误信息表明这个“master”参数是NoneType,也就是说它没有tk这个属性。查看一下Tkinter的文档,关于StringVar的内容在这里:http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html
可以看到,master参数默认是None。这意味着master应该是一个包含这个StringVar的控件(也就是说,StringVar不和任何控件关联有意义吗?)。我必须说,确实需要把StringVar对象和一个控件关联起来,这样它才会有'tk'这个属性。
12
我觉得你可能需要在使用 StringVar 之前,先明确地调用 Tk()。
你只需要这样做:
from Tkinter import *
Tk() # Add this
var = StringVar()
var.set('test');