初始化时遇到tkinter StringVar()错误
(Python版本:3.1.1)
我在使用tkinter中的StringVar
时遇到了一个奇怪的问题。在一个项目中,我想不断更新一个消息框,但在创建这个变量时总是出错。于是我跳到一个交互式的Python环境中去调查,结果得到了这个:
>>> StringVar
<class 'tkinter.StringVar'>
>>> StringVar()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python31\lib\tkinter\__init__.py", line 243, in __init__
Variable.__init__(self, master, value, name)
File "C:\Python31\lib\tkinter\__init__.py", line 174, in __init__
self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
>>>
有没有什么想法?我看到的每个tkinter使用示例都是在初始化变量时没有传递任何东西给构造函数,所以我不知道自己是不是漏掉了什么……
1 个回答
16
StringVar 需要一个主控对象:
>>> StringVar(Tk())
<Tkinter.StringVar instance at 0x0000000004435208>
>>>
或者更常见的写法是:
>>> root = Tk()
>>> StringVar()
<Tkinter.StringVar instance at 0x0000000004435508>
当你创建 Tk 的时候,会生成一个新的解释器。在这之前,什么都不能用:
>>> from Tkinter import *
>>> StringVar()
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "C:\Python26\lib\lib-tk\Tkinter.py", line 251, in __init__
Variable.__init__(self, master, value, name)
File "C:\Python26\lib\lib-tk\Tkinter.py", line 182, in __init__
self._tk = master.tk
AttributeError: 'NoneType' object has no attribute 'tk'
>>> root = Tk()
>>> StringVar()
<Tkinter.StringVar instance at 0x00000000044C4408>
你找到的例子的问题在于,文献中可能只展示了部分代码片段,这些代码片段应该是在一个类里面或者更长的程序中,所以导入的库和其他代码没有明确显示出来。