2010-10-22 16 views
5

que tienen un control deslizante y quiero llamar a una función específica sólo cuando la interacción es completa. La idea es llamar a una función después de 500 ms (y no antes). Si el control deslizante continúa moviéndose, la llamada se cancela. En otras palabras, si el control deslizante "descansa" durante más de 500 ms que la función es llamada.¿Cómo puedo llamar a una función con retraso en Python?

Gracias

Actualizar

#slider 

    def updateValue(self): 
     #self._job = None 
     #self.preview.updateContourValue(float(self.slider.get())) 
     print "updated value" 

    timer = Timer(5.0, updateValue) 

    def sliderCallback(self): 
     timer.cancel() 
     timer.start() 

Respuesta

2

Patrick: Ver este hilo - How to create a timer using tkinter?

Puede utilizar Threading.Timer para hacer esto. Tiene un método cancel que puede usar para cancelarlo antes de que se ejecute.

+1

al interactuar con una biblioteca de interfaz gráfica de usuario (que es lo que esto suena como), es probable que no quieren usar un hilo. Use temporizadores de ventana. No se ejecutarán en un hilo por lo que no introducirán problemas de enhebrado; en cambio, se ejecutan en un punto predefinido según el sistema. Estos son diferentes en diferentes bibliotecas de GUI, pero son una característica estándar. Por ejemplo, en Win32 es 'SetTimer()' y el mensaje WM_TIMER. –

+0

@aaronasterling Estoy recibiendo el mensaje de error: elevar RuntimeError ("hilo ya iniciado") (He actualizado a la pregunta con mi código) – aneuryzm

+0

@Glenn Gracias por señalarlo. ¿Pondrás eso como una respuesta para que pueda ser el aceptado? Dejaré esta respuesta como una lección objetiva. – aaronasterling

Cuestiones relacionadas