【问题标题】:Getting tkinter StringVar() error on init在初始化时出现 tkinter StringVar() 错误
【发布时间】:2012-01-06 18:39:15
【问题描述】:

(Python 版本:3.1.1)

我在 tkinter 中遇到了 StringVar 的奇怪问题。在尝试不断更新项目中的消息小部件时,我在尝试创建变量时不断收到错误消息。我跳到一个交互式 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 使用中看到的每个示例都显示初始化变量时没有发送任何内容到构造函数,所以如果我遗漏了什么,我会不知所措......

【问题讨论】:

    标签: python python-3.x tkinter


    【解决方案1】:

    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>
    

    您发现的示例的问题在于,可能在文献中它们仅显示了部分 sn-ps,这些 sn-ps 应该位于类或更长的程序中,因此没有明确指出导入和其他代码。

    【讨论】:

      猜你喜欢
      • 2011-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多