Проблема с "StringVar" в программе Python
Я пытаюсь написать очень простой пользовательский интерфейс в 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, но может быть, я делаю что-то не так? Я использую python версии 2.6.5 на Ubuntu Linux, если это имеет значение.
2 ответов
Я думаю, вам может потребоваться вызвать TK() явно перед вызовом StringVar.
просто сделать это:
from Tkinter import *
Tk() # Add this
var = StringVar()
var.set('test');
Я никогда ничего не делал с Tkinter сам, но здесь похоже, что этот класс StringVar наследуется от базового класса переменных, как вы можете видеть в обратной трассировке с вызовом Variable.__init__()
. Исключение было сделано с заявлением " self.tk = мастер.tk". Следующее сообщение об ошибке указывает, что этот параметр" master " не является типом и, следовательно, не будет иметь такого атрибута tk. Глядя на документацию Tkinter для StringVar здесь: http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html
для параметра master по умолчанию установлено значение None. Похоже, master должен быть предоставлен как виджет, который может содержать этот StringVar (т. е. имеет ли смысл иметь StringVar, не связанный с виджетом?). Я бы сказал, что вам определенно нужно связать объект StringVar с виджетом, чтобы он имел атрибут "tk".