[wxPython-users] Re: Re: Re: wxTimer never times out sometimes

Robin Dunn robin at alldunn.com
Wed Aug 23 15:16:26 PDT 2006


Jeffrey Barish wrote:
> Robin Dunn wrote:
> 
>> Jeffrey Barish wrote:
>>> Jeffrey Barish wrote:
>>>
>>>>> Have you tried .Stop() then .Start()?
>>>>>
>>>>> - Josiah
>>>> I did not try it because the documentation says that "If the timer was
>>>> already running, it will be stopped by this method [start] before
>>>> restarting it."  However, if you think that it might make a difference,
>>>> I
>>>> will try it.  At this point, I have nothing else to try, so any
>>>> suggestion is welcome.
>>> It's official: This sensible suggestion did not fix the problem.
>>>
>>> As this is the only serious problem I have remaining in my application
>>> and as I am stumped, I thought that a peek at some of the code might
>>> trigger additional thoughts.
>>>
>>> The function that I use to trigger the timer is this:
>>>
>>>     def _startTimer(self):
>>>         '''Utility function for starting the timer and activating the
>>>         indicator.'''
>>>         self.timer.Start(10000, True)
>>>         self.ind_p.setInd()
>>>
>>> The timeout event is bound to this:
>>>
>>>     def doTimer(self, event):
>>>         '''The timer timed out.'''
>>>         print 'Timeout'
>>>         self.ind_p.clrInd()
>>>
>>> The _startTimer utility routine is the only place where the timer Start
>>> is
>>> called.  What I observe is that the indicator goes on but it never goes
>>> off
>>> and I never get a message from the print statement.  The fact that the
>>> indicator went on tells me that the timer must have started, yet I never
>>> make it to the event handler.  The binding never changes.  It is created
>>> with this:
>>>
>>>         self.Bind(wx.EVT_TIMER, self.doTimer, self.timer)
>>>
>>> where self is the main panel.
>>>
>>> Also, once the timer fails once, I can't find any way to trigger it
>>> again. I keep thinking that it will trigger if I do the things that
>>> normally trigger it and when it times out it will belatedly clear the
>>> indicator and
>>> print the message.  However, nothing I do has this effect.
>>>
>>> I just stuck
>>>
>>>             if self.timer.IsRunning():
>>>                 print 'Started timer'
>>>             else:
>>>                 print 'Failed to start timer'
>>>
>>> at the end of _startTimer.  It will be interesting to see whether the
>>> timer thinks that it is running when the indicator fails to clear.
>>>
>>> I don't have event.Skip() at the end of doTimer.  Could that be the
>>> problem?
>> It shouldn't cause any problems.  The default handler doesn't do anything.
>>
>> You didn't show the code that creates the timer object.
>>
> 
>         self.timer = wx.Timer(self, wx.ID_ANY)
> 
> where self is the main panel.

It's a long shot, but does using wx.Timer(self, wx.NewId()) make any 
difference?

-- 
Robin Dunn
Software Craftsman
http://wxPython.org  Java give you jitters?  Relax with wxPython!





More information about the wxpython-users mailing list