在init上获取tkinter StringVar()错误

时间:2012-01-06 18:39:16

标签: python python-3.x tkinter

(Python版本:3.1.1)

我在tkinter中遇到StringVar的奇怪问题。尝试在项目中持续更新Message小部件时,我在尝试创建变量时不断收到错误。我跳到一个交互式python shell进行调查,这就是我得到的:

>>> 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 个答案:

答案 0 :(得分:10)

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>

您找到的示例的问题是,可能在文献中,它们只显示了部分片段或应该在更长的程序中,因此未明确指出导入和其他代码。