PyQt Quickie: QTimer
El primer caso es así:
El segundo es así:
# Creamos un QTimer timer = QTimer() # Lo conectamos a f timer.timeout.connect(f) # Llamamos a f() cada 5 segundos timer.start(5000)
¿Fácil, no? Bueno, sí, pero tiene un par de trampas.
-
Hay que guardar la referencia a
timer
Si no, lo recoge el basurero, y nunca se llama a f()
-
Capaz que son más de 5 segundos
Va a llamar a
f()
más o menos cada 5 segundos después de que entre al event loop. Tal vez eso no sea enseguida después de que arrancás el timer! -
Capaz que se pisan las llamadas
Si
f()
tarda mucho en terminar, y vuelve a entrar al event loop (por ejemplo, llamando aprocessEvents
) tal vez timer se dispare antes quef()
termine, y la llame de nuevo. Eso casi nunca es buena idea.
Una alternativa:
Ese fragmento llama a f()
una sola vez, pero ella misma se pone en cola para correr en 5 segundos. Ya que lo hace en un finally
lo va a hacer aún si las cosas se rompen.
O sea, no se va a pisar. También quiere decir que no son 5 segundos, sino 5 más lo que tarde f
. Y no hace falta guardar referencias al QTimer.
Último tipo: podés usar QTimer para que algo se haga "apenas estés en el event loop"
¡Ojalá sirva!
Gracias! Me ha servido de mucho!
Very helpful and simple tutorial. Thank You!