2010-10-22 22 views
5

Bir kaydırıcım var ve yalnızca etkileşim tamamlandığında belirli bir işlevi çağırmak istiyorum. Fikir 500ms sonra (ve daha önce değil) bir işlevi çağırmaktır. Kaydırıcı hareket etmeye devam ederse, çağrı iptal edilir. Başka bir deyişle, eğer kaydırıcı "fonksiyondan" 500ms'den fazla "dinlenirse" diyorsa.Python'da gecikmeli bir işlevi nasıl çağırabilirim?

Teşekkür

Güncelleme

#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() 

cevap

2

Patrick: Bu konuyu izle - How to create a timer using tkinter?

Bunu yapmak için Threading.Timer kullanabilirsiniz. Çalışmadan önce iptal etmek için kullanabileceğiniz cancel yöntemine sahiptir.

+1

Bir GUI kitaplığı ile etkileşimde bulunduğunuzda (bunun gibi), muhtemelen bir iş parçacığı kullanmak istemezsiniz. Pencereleme zamanlayıcılarını kullan. Bir iş parçacığında yayınlanmayacaklar, böylece iş parçacığı konularını tanıtmayacaklar; bunun yerine, sisteme bağlı olarak önceden tanımlanmış bir noktada çalışırlar. Bunlar farklı GUI kitaplıklarında farklıdır, ancak standart bir özelliktir. Örneğin, Win32'da 'SetTimer()' ve WM_TIMER mesajıdır. RuntimeError yükseltmek ("zaten başlamış iplik") (Benim koduyla soruyu güncelledik) Bunu belirttiğin için –

+0

@aaronasterling aşağıdaki hata iletisi alıyorum. Bunu bir cevap olarak kabul edersiniz, kabul edilen kişi olabilir mi? Bu cevabı bir nesne dersi olarak bırakacağım. – aneuryzm

+0

@Glenn Teşekkür: – aaronasterling

İlgili konular