Manuel Kaufmann
2006-11-07 00:05:31 UTC
Hola gente de PyAr, logré hacer un system tray con algunas consultas
que les hice a ustedes y algo que he leído por ahí (desde ya gracias a
todos). Pero ahora me encuentro con un problema, el cual pude
"solucionar" una gran parte.
El problema es el siguiente, cuando lanzo mi aplicación KDE (clase
KApplication) y el SystemTray (clase KSystemTray) funciona todo
correctamente. Ahora cuando por ejemplo presiono botón derecho en el
TrayIcon y selecciono una de las funciones, si esta demora un tiempo
considerable el TrayIcon se queda tildado y no puedo seguir elegiendo
opciones (funciones) del programa.
Esto lo solucioné ejecutando esa función en un hilo que se llama
cuando el KSystemTray (en realidad es la clase KPopupMenu, que es la
que desplega el menú) envía una señal; y en la función esta puse lo
siguiente:
def iniciarDemonio():
from threading import Thread
global DEMONIO
class TestThr(Thread):
def __init__(self):
Thread.__init__(self)
#redefino el metodo run
def run(self):
while 1:
print time.ctime()
#hago algo
funcion_x()
#y duermo el demonio
time.sleep(TIEMPO_ESPERA)
#¿esto está bien? [*1*]
if DEMONIO == False:
#demonio en ejecucion
DEMONIO = True
thread = TestThr()
# lo seteo como demonio para que cuando cierre la aplicacion principal
# termine con este hilo tambien
thread.setDaemon(1)
thread.start()
else:
print 'El demonio ya esta en ejecucion'
[*1*]: ¿esto está bien hecho así, o hay alguna forma más pythónica de
hacerlo? Si está bien así, luego ¿cómo hago para parar el demonio
desde otra función, por ejemplo cuando presiono en el menú (de botón
derecho en el TrayIcon), "Detener demonio"?
Perdón si son demasiadas preguntas y gracias a todos!
Saludos!
--
Kaufmann Manuel
---------------------------------------------------------------------
Para dar de baja la suscripción, mande un mensaje a:
pyar-unsubscribe-***@public.gmane.org
Para obtener el resto de direcciones-comando, mande un mensaje a:
pyar-help-***@public.gmane.org
PyAr - Python Argentina - Sitio web: http://www.python.com.ar/
que les hice a ustedes y algo que he leído por ahí (desde ya gracias a
todos). Pero ahora me encuentro con un problema, el cual pude
"solucionar" una gran parte.
El problema es el siguiente, cuando lanzo mi aplicación KDE (clase
KApplication) y el SystemTray (clase KSystemTray) funciona todo
correctamente. Ahora cuando por ejemplo presiono botón derecho en el
TrayIcon y selecciono una de las funciones, si esta demora un tiempo
considerable el TrayIcon se queda tildado y no puedo seguir elegiendo
opciones (funciones) del programa.
Esto lo solucioné ejecutando esa función en un hilo que se llama
cuando el KSystemTray (en realidad es la clase KPopupMenu, que es la
que desplega el menú) envía una señal; y en la función esta puse lo
siguiente:
def iniciarDemonio():
from threading import Thread
global DEMONIO
class TestThr(Thread):
def __init__(self):
Thread.__init__(self)
#redefino el metodo run
def run(self):
while 1:
print time.ctime()
#hago algo
funcion_x()
#y duermo el demonio
time.sleep(TIEMPO_ESPERA)
#¿esto está bien? [*1*]
if DEMONIO == False:
#demonio en ejecucion
DEMONIO = True
thread = TestThr()
# lo seteo como demonio para que cuando cierre la aplicacion principal
# termine con este hilo tambien
thread.setDaemon(1)
thread.start()
else:
print 'El demonio ya esta en ejecucion'
[*1*]: ¿esto está bien hecho así, o hay alguna forma más pythónica de
hacerlo? Si está bien así, luego ¿cómo hago para parar el demonio
desde otra función, por ejemplo cuando presiono en el menú (de botón
derecho en el TrayIcon), "Detener demonio"?
Perdón si son demasiadas preguntas y gracias a todos!
Saludos!
--
Kaufmann Manuel
---------------------------------------------------------------------
Para dar de baja la suscripción, mande un mensaje a:
pyar-unsubscribe-***@public.gmane.org
Para obtener el resto de direcciones-comando, mande un mensaje a:
pyar-help-***@public.gmane.org
PyAr - Python Argentina - Sitio web: http://www.python.com.ar/