tkinter en python

Antonio Castro acastro en ciberdroide.com
Jue Mayo 19 10:10:22 CEST 2005


On Wed, 18 May 2005, Abel Aranda wrote:

> Buenas tardes, al final lo solucione utilizando un thread, pero sigo con
> la varios problemas....

En mi humilde opinión.

Es posible usar threads en programas con tkinter pero teniendo siempre
en cuenta que solo uno de los threads debe de hacer uso de las llamadas
a tkinter ya que tkinter no es reentrante.

Yo usé threading con tkinter para lanzar de forma concurrente comandos
del SO que tardan bastante para evitar que todo quede bloqueado.

No se si lo que digo se adapta a tus necesidades porque para cada caso
hay que buscar una solución distinta respetando las limitaciones de
tkinter. Yo tuve que implementar un sistema de refresco de eventos
pendientes. Lo que sigue es un intento de resumir lo que yo hice.


    #----------------------------------------------
    def LinesPopenTask(comando):
        .....
        fdin, fdout, fderr=os.popen3(comando, 'r')
        .....


    #----------------------------------------------
    def WaitEndTask():
        '''
        Esperamos a que termine la tarea pero cada cuarto
        de segundo procesamos todos los eventos pendientes.
        '''
        DBG.DebugTrace('mkmt_os.WaitEndTask()')
        while self.runing_LinesPopenTask:
            root.after(250)
            root.update()


    .... En en el programa principal hago lo siguiente

    t = threading.Thread(target=LinesPopenTask, args=(comando,))
    t.start()
    WaitEndTask() # Espera activa




-- 
Un saludo
Antonio Castro

       /\     /\
         \\W//
        _|0 0|_
+-oOOO-(___o___)-OOOo---------------------+
| . . . . U U . Antonio Castro Snurmacher |
| . . . . . . . acastro en ciberdroide.com   |
+()()()---------()()()--------------------+




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