[Python-es] Dejar hacer

2011-02-09 Por tema Narcis Garcia - GiLUG
Hola, estoy diseñando una interfaz con wxPython que enumera una serie de 
computadoras en red, y actualiza su estado.


Por ejemplo:
Equipo 1: ausente
Equipo 2: 10%
Equipo 3: 50%
Equipo 4: 20%
etc.

Le he puesto un boton para actualizar el estado (cada consulta tarda su 
tiempo), y esto tiene que servir para unos 30 equipos. Al pulsar 
[Actualizar] hago un recorrido (for Actual in Equipos) para consultar su 
estado y reflejarlo en las etiquetas de texto:

Indicador.SetLabel(consultando)
NuevoEstado=EstadoConsultado(Actual)
Indicador.SetLabel(NuevoEstado)

El problema es que se queda todo congelado hasta que termina todo el 
proceso de toda la lista, y el formulario no cambia hasta el final. Ni 
siquiera se aprecia el consultando para cada consulta durante el 
recorrido.


He buscado un equivalente al DoEvents de VisualBasic, pero no he 
encontrado nada para Python. ¿Alguien sabe como resolverlo?


Gracias.
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Dejar hacer

2011-02-09 Por tema marmolro
2011/2/9 Narcis Garcia - GiLUG informat...@actiu.net

 Hola, estoy diseñando una interfaz con wxPython que enumera una serie de
 computadoras en red, y actualiza su estado.

 Por ejemplo:
 Equipo 1: ausente
 Equipo 2: 10%
 Equipo 3: 50%
 Equipo 4: 20%
 etc.

 Le he puesto un boton para actualizar el estado (cada consulta tarda su
 tiempo), y esto tiene que servir para unos 30 equipos. Al pulsar
 [Actualizar] hago un recorrido (for Actual in Equipos) para consultar su
 estado y reflejarlo en las etiquetas de texto:
 Indicador.SetLabel(consultando)
 NuevoEstado=EstadoConsultado(Actual)
 Indicador.SetLabel(NuevoEstado)

 El problema es que se queda todo congelado hasta que termina todo el
 proceso de toda la lista, y el formulario no cambia hasta el final. Ni
 siquiera se aprecia el consultando para cada consulta durante el
 recorrido.

 He buscado un equivalente al DoEvents de VisualBasic, pero no he
 encontrado nada para Python. ¿Alguien sabe como resolverlo?

 Gracias.
 ___
 Python-es mailing list
 Python-es@python.org
 http://mail.python.org/mailman/listinfo/python-es
 FAQ: http://python-es-faq.wikidot.com/


Para que se refresque tu parte gráfica tienes que devolverle el control a la
misma. No he hecho nada nunca con wxPython, pero es lo mismo en todos los
frameworks gráficos que conozco. Soluciones hay varias:

   - Implementa la consulta de estado en un thread (o varios) independiente
   y actualiza la parte gráfica mediante eventos (supongo que hay un
   equivalente a signal/slot de KDE para wxPython)
   - Implementa la consulta por partes, devolviendo el control a la gui en
   cata iteración (por ejemplo, por equipos).

Un saludo,
marmolro
___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Re: [Python-es] Dejar hacer

2011-02-09 Por tema Narcis Garcia - GiLUG

Supongo que la asincronía es la clave para hacerlo bién.
Ahora he encontrado el método Update() aplicable a todos los objetos 
gráficos, y me sirve para la actualización manual (no funciona al abrir 
el programa).


No sé cómo se devuelve el control a la GUI.
Supongo que me acabaré mirando lo de los hilos/tareas asíncronas.

Gracias.


Al 09/02/11 21:37, En/na marmolro ha escrit:



2011/2/9 Narcis Garcia - GiLUG informat...@actiu.net
mailto:informat...@actiu.net

Hola, estoy diseñando una interfaz con wxPython que enumera una
serie de computadoras en red, y actualiza su estado.

Por ejemplo:
Equipo 1: ausente
Equipo 2: 10%
Equipo 3: 50%
Equipo 4: 20%
etc.

Le he puesto un boton para actualizar el estado (cada consulta tarda
su tiempo), y esto tiene que servir para unos 30 equipos. Al pulsar
[Actualizar] hago un recorrido (for Actual in Equipos) para
consultar su estado y reflejarlo en las etiquetas de texto:
Indicador.SetLabel(consultando)
NuevoEstado=EstadoConsultado(Actual)
Indicador.SetLabel(NuevoEstado)

El problema es que se queda todo congelado hasta que termina todo el
proceso de toda la lista, y el formulario no cambia hasta el final.
Ni siquiera se aprecia el consultando para cada consulta durante
el recorrido.

He buscado un equivalente al DoEvents de VisualBasic, pero no he
encontrado nada para Python. ¿Alguien sabe como resolverlo?

Gracias.
___
Python-es mailing list
Python-es@python.org mailto:Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/


Para que se refresque tu parte gráfica tienes que devolverle el control
a la misma. No he hecho nada nunca con wxPython, pero es lo mismo en
todos los frameworks gráficos que conozco. Soluciones hay varias:

* Implementa la consulta de estado en un thread (o varios)
  independiente y actualiza la parte gráfica mediante eventos
  (supongo que hay un equivalente a signal/slot de KDE para wxPython)
* Implementa la consulta por partes, devolviendo el control a la gui
  en cata iteración (por ejemplo, por equipos).

Un saludo,
marmolro



___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

___
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/