У меня есть виджет wx.Slider
, связанный с обработчиком событий. Когда пользователь перемещает слайдер, выполняется какой-то процесс. Однако, поскольку процесс может занять до 3 секунд, я не хочу, чтобы событие срабатывало непрерывно, когда пользователь перемещает ползунок. Вместо этого я хочу, чтобы событие срабатывало только в том случае, если пользователь перестает перемещать слайдер на некоторое время (скажем, 2 секунды). Я пробовал использовать time.time()
с while
-loop (см. Код ниже), но это не сработало, потому что событие все равно будет срабатывать многократно - это просто, что увольнение затянулось. Любая идея/указатель/предложение были бы весьма полезны.wxpython wx.Slider: как запустить событие только в том случае, если пользователь делает паузу в течение некоторого заданного времени
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()
Спасибо! Он делает именно то, что я хочу. – Alex