(sin asunto)
Rolando José Torres Sánchez
rolandojtorres en gmail.com
Mie Oct 18 15:12:05 CEST 2006
> Date: Tue, 17 Oct 2006 12:50:12 +0200
> From: Inigo <imunoz en zylk.net>
> Subject: [Python-es] problema con hilos y tk
> To: python-es en aditel.org
> Message-ID: <4534B564.4000001 en zylk.net>
> Content-Type: text/plain; charset=ISO-8859-1; format=flowed
>
> Hola:
> Estoy haciendo una aplicación con hilos y tk. Es muy sencillo. El
> hilo lanza una ventana modal con un botón y una etiqueta. En el método
> principal lanza 4 hilos diferentes, con lo que debería abrir 4 ventanas
> diferentes. El caso es que en Linux funciona y en Windows no, algunas
> veces muestra las ventanas pero no muestra ni el botón ni la etiqueta.
> He probado con Wxpython y pasa lo mismo. Copio a continuación el ejemplo:
>
> #!/usr/bin/env python
> import threading
> from Tkinter import *
>
> class OpenWThread(threading.Thread):
> def __init__(self, string):
> threading.Thread.__init__(self)
> self.string = string
>
> def run(self):
> root = Tk()
> Label(root, text=self.string).pack(side=TOP, padx=5, pady=5)
> Button(root, text="Aceptar",
> command=root.destroy).pack(side=BOTTOM, padx=5, pady=5)
> root.mainloop()
>
> for i in range(4):
> t = OpenWThread("prueba "+str(i))
> t.start()
>
>
Pienso que el problema esta en que el metodo para usar hilos en TCL/TK
es distinto que en python, aqui puedes encontrar mas información de
usar hilos en TCL/TK
http://wiki.tcl.tk/2?Q=Thread
En Linux puede funcionar, porque linux genera cada GUI como un proceso
distinto, es posible que sobre Windows esto no suceda, y se quede
esperando que la aplicacion de la primera ventana termine para
continuar con la siguiente.
proc run {texto win} {
set v $win
toplevel .$v
pack [button .$v.b -text "$texto" ] [label .$v.l -text $texto]
}
set v 0
foreach { texto } { TEXTO NOTAS CALCULADORA PINTAR } {
incr v
run $texto $v
}
wm withdraw .
Este codigo en TCL/TK funciona sobre Windows, Linux, y Windows Pocket,
genera cuatro botones con los textos TEXTO NOTAS CALCULADORA
PINTAR, en ventanas distintas creo que es lo que tu quisieras hacer
con python.
Rolando Jose Torres
TCL/TK inside Python
Más información sobre la lista de distribución Python-es