Problemas con dialogos en Tk

Marcos Sánchez Provencio rapto en arrakis.es
Mar Ene 21 14:42:54 CET 2003


Pues no sé si es demasiado ñapas, pero esto va en Linux. No tengo ni
idea de Tkinter, así que me perdonen los gurus si digo tonterías.

import Tkinter
import tkSimpleDialog

root=None

def boton_click(e=None):
  global boton1
  boton1.configure(state=Tkinter.DISABLED)
  s=tkSimpleDialog.askstring("a1","a2")
  boton1.configure(state=Tkinter.NORMAL)

def main():
    
  global root
  global boton1
  root= Tkinter.Tk()
  boton1 = Tkinter.Button(root,
    text="Pulsa cliks deprisa pa que pete",
    command=boton_click
  )
  boton1.place(x=1,y=10)

  root.mainloop()

main()

El mar, 21-01-2003 a las 13:06, Joaquin Jose del Cerro Murciano
escribió:
> Hola, a todos.
> Estabamos trabajando con Tkintier en un FreeBSD y hemos detectado un problema.
> 
> Si creamos una ventana, le ponemos un boton y en el click de este mostramos el 
> cuadro de dialogo askstring() casi todas las veces peta en el modulo 
> tkSimpleDialog.
> 
> ------------------------------------------------
>   File "tkdialog.py", line 14, in boton1_click
>     s=tkSimpleDialog.askstring("a1","a2",parent=self.native())
>   File 
> "/u/jjdelcerro/trabajo/apps/pub/python/lib/mo/externalpkg/tklib/tkSimpleDialog.py", 
> line 303, in askstring
>     d = apply(_QueryString, (title, prompt), kw)
>   File 
> "/u/jjdelcerro/trabajo/apps/pub/python/lib/mo/externalpkg/tklib/tkSimpleDialog.py", 
> line 281, in __init__
>     _QueryDialog.__init__(self, *args, **kw)
>   File 
> "/u/jjdelcerro/trabajo/apps/pub/python/lib/mo/externalpkg/tklib/tkSimpleDialog.py", 
> line 179, in __init__
>     Dialog.__init__(self, parent, title)
>   File 
> "/u/jjdelcerro/trabajo/apps/pub/python/lib/mo/externalpkg/tklib/tkSimpleDialog.py", 
> line 50, in __init__
>     self.grab_set()
>   File "/usr/local/lib/python2.2/lib-tk/Tkinter.py", line 493, in grab_set
>     self.tk.call('grab', 'set', self._w)
> TclError: grab failed: window not viewable
> -----------------------------------------------
> 
> Parece ser que es un problema de que se amontonan eventos antes de que el 
> cuadro de dialogo haya terminado de inicializarse.
> 
> Da la sensacion de que se puede arreglar tocando el modulo tkSimpleDialog, el 
> metodo __init__ de la clase Dialog y moviendo la linea "self.grab_set()" 
> justo despues de la de "self.transient(parent)" en lugar de inicializar 
> primero todos los controles de la ventana. A pesar de esto de vez en cuando, 
> aunque muchas menos veces, tambien peta.
> 
> No tengo claro si esto puede ser un arreglo decente o no. Alguien se ha 
> tropezado con algo asi ?
> 
> Aqui incluyo el pedezito de pruebas que estaba usando:
> --------------------------------------------------
> import Tkinter
> import tkSimpleDialog
> 
> root=None
> 
> def boton_click(e=None):
>   s=tkSimpleDialog.askstring("a1","a2")
> 
> def main():
>   global root
> 
>   root= Tkinter.Tk()
>   boton1 = Tkinter.Button(root,
>     text="Pulsa cliks deprisa pa que pete",
>     command=boton_click
>   )
>   boton1.place(x=1,y=10)
> 
>   root.mainloop()
> 
> main()
> ----------------------------------------------------
> 
> 
> Un saludo
> Joaquin
> 
> jjdelcerro en cenoclap.es
> 
> _______________________________________________
> Python-es mailing list
> Python-es en aditel.org
> http://listas.aditel.org/listinfo.py/python-es
-- 
Marcos Sánchez Provencio <rapto en arrakis.es>




Más información sobre la lista de distribución Python-es