Получение ошибки tkinter StringVar () при инициализации - PullRequest
6 голосов
/ 06 января 2012

(версия Python: 3.1.1)

У меня странная проблема с StringVar в tkinter. Пытаясь постоянно обновлять виджет «Сообщение» в проекте, я продолжал получать сообщение об ошибке при попытке создать переменную. Я выпрыгнул в интерактивную оболочку 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 Ответ

11 голосов
/ 06 января 2012

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>

Проблема с примерами, которые вы нашли, состоит в том, что, вероятно, в литературе они показывают только частичные фрагменты, которые должны быть внутри класса или в более длинной программе, чтобы импортировать и другие.код явно не указан.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...