[pyar] gui2py

Mariano Reingart reingart en gmail.com
Vie Jul 4 12:55:54 ART 2014


2014-07-03 16:32 GMT-03:00 Diego Sarmentero <diego.sarmentero en gmail.com>:

> No se como funciona wx, pero desde Qt, cuando necesitas actualizar la
> GUI desde un thread, lo que haces es emitar alguna señal o algo, y eso
> llega al main thread, y entonces el codigo que agarre esa señal si
> puede hacer modificaciones en la UI
>
>
En wxPython también se puede enviar un evento, pero lo más fácil sería
usar wx.CallAfter(función, *parametros).
Esa función agenda una llamada en el event loop (sin necesidad de crear un
evento ni señal), y se ejecutará en el thread principal automáticamente.

La documentación (classic):

http://www.wxpython.org/docs/api/wx.CallLater-class.html

La nueva doc (phoenix):

http://wxpython.org/Phoenix/docs/html/functions.html#CallAfter


Por ejemplo, si solo hay que actualizar una barra de progreso desde un
hilo, una forma de resolverlo sería, en wx puro:

import wx, thread, time

def hilo():
   for i in range(100):
       time.sleep(1)    # hacer algo
       wx.CallAfter(incrementar, i)

def incrementar(i):
    print "progreso:", i
    bar.Value = i           # actualizo la barra

app = wx.App(False)
win = wx.Frame(None)
bar = wx.Gauge(win)
win.Show()
thread.start_new(hilo, ())
app.MainLoop()


Con gui2py (actualizado a hoy ya que lo acabo de agregar):


 import gui, thread, time

def hilo():
   for i in range(100):
       time.sleep(1)    # hacer algo
       gui.call_after(incrementar, i)

def incrementar(i):
    print i
    bar.value = i

with gui.Window() as win:
    bar = gui.Gauge()
    win.show()

thread.start_new(hilo, ())
gui.main_loop()


Hay un ejemplo completo en la wiki de wxPython:

http://wiki.wxpython.org/CallAfter

También se puede crear un evento personalizado:

http://wiki.wxpython.org/LongRunningTasks

Por útimo, también wx tiene una función CallLater (para especificar un
determinado delay antes de ejecutar) y una clase CallLater con un timer.

Sds

Mariano Reingart
http://www.sistemasagiles.com.ar
http://reingart.blogspot.com
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20140704/005dcdc4/attachment.html>


More information about the pyar mailing list