Problemas con aplicación python+gtk

bameda bameda en gmail.com
Mie Nov 24 04:31:40 CET 2004


Hola en primer lugar saludar a toda la lista ya que soy nuevo en ella,
este es mi primer mensaje y espero que entre todos encontremos una
solución. Trataré de explicarme lo mejor que pueda:

Estoy iniciandome en python y tras haberme leído algún que otro manual
y haber asistido a alguna que otra charla (concretamente a 2, una de
programacion en python y otra de python + GTK) decidí hacer mi primera
aplicación gráfica. Algo facilito pensé y como en ese momento estada
dedicandome a una lavor doméstica que todos los que estudiamos fuera
de casa padecemos (me refiero a hacer la colada) pues decidi hacer una
aplicación que me alertara cuando la lavadora acabara y extenderlo a
la secadora.

Pues bien, sabiendo el tiempo de duración de ambos cacharros, buscando
dos archivitos de audio molones yn tirando algunas lineas de código
parecia que todo era pan comido.

Instalé Glade para currarme el tema del GTK y tire mi código que
aparentemente tira bien. Para reproducir el archivo de audio use el
mpg321. Mi algoritmo de la aplicación es muy sencillo: en primer lugar
obtengo la hora de inicio al pulsar al boton de comenzar, le sumo el
tiempo que tarda la lavadora en dejar mi ropa limpita y muestro ambos
tiempos en mi aplicación. Simultaneamente una tupla, que contiene la
h, min y seg que utiliza la lavadora, va disminuyendo segundo a
segundo. Para ello voy leyendo (con un bucle) la hora actual y cuando
varía un seg con la anterior esta tupla se modifica. Así hasta que
llegue a 0 que será cuando suene la alarma avisandonos de que ya
podemos ir a meter la ropa a la secadora.

Pues bien, mi problema es que los campos en mi aplicación gráfica no
se actualizan hasta el fina, aunque yo dentro del bucle el contador
hacia atrás lo actualizo en cada iteración, y además durante la
ejecución de el bucle no puedo hacer nada más. No puedo, por ejemplo
crear un boton que me interrumpa el bucle.

Mi pregunta es ¿cómo puedo implementar mi búcle para que me actualice
la informacion en cada iteración? y ¿cómo puedo hacer para que esta
función se ejecute en "segundo plano"?. Haber si alguin me puede
iluminar o conducirme hacia un poco de documentación que me resuelva
mis dudas.

Aquí os dejo la función en discordia y algo más de código:

class GUI:    
    def __init__(self):   
    def start_preferences(self):  
    def get_time(self):  
    def play_alarm_lava(self):   
    def play_alarm_seca(self): 
    def add_times(self, t1, t2):
    def rest_times(self, t1, t2):
    def put_value_on_secadora_start_and_stop(self):
    def put_value_on_secadora_timeremain(self, t1, t2, t3):
        if (self.secadora_entry_timeremaind_heure.get_text() != t1):
            self.secadora_entry_timeremaind_heure.set_text(str(t1))
        if (self.secadora_entry_timeremaind_minute.get_text() != t2):
            self.secadora_entry_timeremaind_minute.set_text(str(t2))
        if (self.secadora_entry_timeremaind_second.get_text() != t3):
            self.secadora_entry_timeremaind_second.set_text(str(t3))
    def put_value_on_lavadora_start_and_stop(self):
    def put_value_on_lavadora_timeremain(self, t1, t2, t3):
    # Widgets actions
    def on_window_destroy(self, widget): 
    def on_botton3_clicked(self,widget):
        t = self.put_value_on_secadora_start_and_stop() # Da la hora
de inicio además
        v = int(self.preferences_entry_secadora_timeremaind_heure.get_text()),
int(self.preferences_entry_secadora_timeremaind_minute.get_text()),
int(self.preferences_entry_secadora_timeremaind_second.get_text())
        self.put_value_on_secadora_timeremain(v[0], v[1], v[2])
        fin = 'false'
        while(fin == 'false' ):
            oldt = t
            t = self.get_time()
            d = self.rest_times(t, oldt)
            v = self.rest_times(v, d)
            if (v[2] == 0 ):
               if( v [1] == 0):
                  if( v [0] ==0 ):
                    fin = 'true'
            print (v)
            if (d[2] > 0):
                self.put_value_on_secadora_timeremain(v[0], v[1], v[2])
        self.play_alarm_seca()

    def on_botton1_clicked(self,widget):
if (__name__ == "__main__"): 
        gui = GUI()
        gtk.main()


Gracias de antemano. Un saludo.  

-- 
____________________________________________
|
|    David Barragán Merino 
|    E-mail: bameda en gmail.com 
|    Ingeniería Informática
|    Universidad Carlos III Madrid
|____________________________________________




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