Ich habe ein wx.Slider
Widget, das an einen Ereignishandler gebunden ist. Wenn ein Benutzer den Schieberegler bewegt, wird ein bestimmter Prozess ausgeführt. Da der Vorgang bis zu 3 Sekunden dauern kann, möchte ich jedoch nicht, dass das Ereignis kontinuierlich ausgelöst wird, wenn der Benutzer den Schieberegler bewegt. Stattdessen möchte ich, dass das Ereignis nur dann ausgelöst wird, wenn der Benutzer den Schieberegler für eine bestimmte Zeit (z. B. 2 Sekunden) nicht mehr bewegt. Ich versuchte mit time.time()
mit einem while
-loop (siehe Code unten), aber es hat nicht funktioniert, weil das Ereignis immer noch wiederholt werden würde - es ist nur, dass die Zündung verzögert wurde. Jede Idee/Zeiger/Vorschlag würde sehr geschätzt werden.wxpython wx.Slider: wie ein Ereignis nur ausgelöst wird, wenn ein Benutzer für eine bestimmte Zeit pausiert
import wx
import time
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
pnl = wx.Panel(self)
sld = wx.Slider(pnl, value=200, minValue=150, maxValue=500, pos=(20, 20),
size=(250, -1), style=wx.SL_HORIZONTAL)
self.counter = 0
sld.Bind(wx.EVT_SCROLL, self.OnSliderScroll)
self.txt = wx.StaticText(pnl, label='200', pos=(20, 90))
self.SetSize((290, 200))
self.SetTitle('wx.Slider')
self.Centre()
self.Show(True)
def OnSliderScroll(self, e):
now = time.time()
future = now + 2
while time.time() < future:
pass
#substitute for the actual process.
self.counter += 1
print self.counter
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
Danke! Es macht genau das, was ich will. – Alex