Проблема с StringVar в программе Python - PullRequest
6 голосов
/ 03 августа 2011

Я пытаюсь написать ОЧЕНЬ простой пользовательский интерфейс на 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 ]

10 голосов
/ 03 августа 2011

Я думаю, что вам может потребоваться явно вызвать Tk () перед вызовом StringVar.

Просто сделайте это:

from Tkinter import *
Tk() # Add this
var = StringVar()
var.set('test');
1 голос
/ 03 августа 2011

Я никогда ничего не делал с Tkinter, но здесь похоже, что этот класс StringVar наследует от базового класса Variable, как вы можете видеть в трассировке с вызовом Variable.__init__().Исключение было вызвано утверждением «self.tk = master.tk».Следующее сообщение об ошибке указывает, что этот параметр «master» является NoneType и, следовательно, не имеет такого атрибута tk.Посмотрите документацию Tkinter для StringVar здесь: http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html

для главного параметра по умолчанию установлено значение Нет.Похоже, мастер должен быть предоставлен как виджет, который может содержать этот StringVar (т.е. имеет ли смысл иметь StringVar, не связанный с виджетом?).Я бы сказал, что вам определенно нужно связать объект StringVar с виджетом, чтобы он имел атрибут 'tk'.

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