Error en un ejemplo mínimo de tkSimpleDialog

Estaba probando un ejemplo de código de Python en Rosetta Code , un sitio de progtwigción de chrestmathy , donde las soluciones para la misma tarea se presentan en tantos lenguajes de progtwigción como sea posible. Para esta tarea, el objective es ingresar una cadena y el entero 75000, desde la interfaz gráfica de usuario. El código se muestra a continuación:

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

Sin embargo, cuando bash ejecutar el código, aparece el siguiente error:

 Traceback (most recent call last): File "C:\Users\vix\Documents\.cache\GUIexample.py", line 3, in  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 estar el problema?

Gracias

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

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

 import Tkinter root = Tkinter.Tk() 

Para ocultar la ventana raíz si no la quiere, use:

 root.withdraw() 

Ver los documentos de Python Tkinter para más información.

Nunca he usado askinteger , pero a juzgar por el mensaje de error, parece que el diálogo necesita saber a su padre pero no le está diciendo lo que debería ser. 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 indique que se requiere esto, pero supongo que sí, ya que todos los widgets Tkinter, excepto la ventana raíz, deben tener un padre.

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