[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