[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