2011-08-03 45 views
6

Estoy tratando de escribir una interfaz de usuario MUY simple en Python usando Tkinter. Me encontré con un pequeño problema con la clase StringVar. El problema es que cuando ejecuto el script de python, aparece un error en la línea que inicializa la variable StringVar. He escrito un programa de ejemplo con este tema que me gustaría conseguir trabajo:Problema con 'StringVar' en el programa Python

from Tkinter import * 

var = StringVar() 
var.set('test'); 

Cuando lo ejecuto a través de pitón veo este error:

$ 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 

Tengo la sensación de que esto es una problema con mi instalación de Python, pero puede ser que esté haciendo algo mal? Estoy usando la versión 2.6.5 de Python en Ubuntu Linux si eso hace la diferencia.

Respuesta

10

Creo que es posible que deba llamar a Tk() explícitamente antes de invocar StringVar.

a hacer esto:

from Tkinter import * 
Tk() # Add this 
var = StringVar() 
var.set('test'); 
+7

¿Por qué tiene que llamar 'Tk()' explícitamente antes de la creación de un 'StringVar' objeto? – nbro

1

Nunca he hecho nada con Tkinter, pero aquí parece que esta clase de StringVar hereda de una clase de base Variable, como se puede ver en la traceback con la llamada al Variable.__init__(). La excepción se planteó con la declaración "self.tk = master.tk". El siguiente mensaje de error indica que este parámetro "maestro" es NoneType y, por lo tanto, no tendría dicho atributo tk. Consultando la documentación de Tkinter para StringVar aquí: http://epydoc.sourceforge.net/stdlib/Tkinter.StringVar-class.html

el parámetro maestro está configurado por defecto en Ninguno. Parece que se debe suministrar maestro como un widget que podría contener este StringVar (es decir, ¿tendría sentido tener un StringVar no asociado con un widget?). Tendría que decir que definitivamente necesita asociar un objeto StringVar con un widget para que tenga un atributo 'tk'.

Cuestiones relacionadas