2012-04-18 21 views
8

Estaba probando un ejemplo de código python en Rosetta Code - un sitio programming chrestomathy, donde las soluciones a la misma tarea se presentan en tantos lenguajes de programación diferentes como sea posible. Para esta tarea, el objetivo es ingresar una cadena y el entero 75000, desde la interfaz gráfica de usuario. El código se muestra a continuación:Error en un ejemplo mínimo de tkSimpleDialog

import tkSimpleDialog 

number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
string = tkSimpleDialog.askstring("String", "Enter a String") 

Sin embargo, cuando trato de ejecutar el código, me sale el siguiente error:

Traceback (most recent call last): 
    File "C:\Users\vix\Documents\.cache\GUIexample.py", line 3, in <module> 
    number = tkSimpleDialog.askinteger("Integer", "Enter a Number") 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 262, in askinteger 
    d = _QueryInteger(title, prompt, **kw) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 189, in __init__ 
    Dialog.__init__(self, parent, title) 
    File "C:\Python27\lib\lib-tk\tkSimpleDialog.py", line 53, in __init__ 
    if parent.winfo_viewable(): 
AttributeError: 'NoneType' object has no attribute 'winfo_viewable' 

Dónde podría ser el problema?

Gracias

+0

Publique la trazabilidad completa, no solo el error. Necesitamos ver el código en el que se encuentra el error. – agf

+0

@agf He editado la pregunta para incluir el rastreo. – engineervix

+0

Estoy usando Python 2.7 en Windows 7 Ultimate 32-Bit. 'root = Tkinter.tk()' no funciona, da 'NameError: name 'Tkinter' no está definido' – engineervix

Respuesta

12

El mensaje de error indica que el cuadro de diálogo necesita una ventana principal.

Con Python 2.x, se crea la ventana raíz con:

import Tkinter 
root = Tkinter.Tk() 

Para ocultar la ventana raíz si no lo desea, utilice:

root.withdraw() 

Véase el Python Tkinter Docs de más información.

+0

* T * k en lugar de tk ... Respuesta correcta por cierto. – FabienAndre

+0

@FabienAndre Gracias, corregido. – agf

1

nunca he utilizado askinteger, pero a juzgar por el mensaje de error parece que el diálogo es necesario para conocer su padre, pero que no están diciendo que lo que debería ser su padre. Intente agregar parent=widget (donde "widget" es una referencia a algún otro widget, generalmente el widget raíz). No puedo encontrar ninguna documentación que diga que esto es obligatorio, pero supongo que es así ya que todos los widgets de Tkinter, excepto la ventana raíz, necesitan tener un padre.

Si el código que muestra en su pregunta es el código completo, le faltan algunas otras cosas. Necesita crear una instancia de la clase Tk (llamada ventana "raíz") y debe iniciar el ciclo de eventos (aunque es posible que el cuadro de diálogo ejecute su propio ciclo de eventos, por lo que puede estar bien si todo lo que necesita es el diálogo único).

Cuestiones relacionadas