Wxpython, using more than 1 timer?

2006-07-22 Thread janama
Hi all,

Using wx
When adding a second timer as i have the first,  the second timer
adding  stops the first timer (updating or stops?) . In this example im
updating a uptime and localtime label. It works fine for displaying the
last self.startTimer2() called. But prevents the previous
self.startTimer1() from running . Im doing something fundamentally
wrong i guess?

def __init__(self, parent):
self._init_ctrls(parent)

#Start timers
self.startTimer1()
self.startTimer2()

def startTimer1(self):
self.t1 = wx.Timer(self)
self.t1.Start(360) # 36 ms = 1/10 hour
self.Bind(wx.EVT_TIMER, self.OnUpTime)

def startTimer2(self):
self.t2 = wx.Timer(self)
self.t2.Start(1000) # run every second
self.Bind(wx.EVT_TIMER, self.OnTime)

def OnTime(self,evt):
self.lblTime.SetLabel(str(time.localtime()))

def OnUpTime(self, evt):
self.lblUptime.SetLabel('Running ' + (str(myTimerText[0])) + '
hours') # 1/10  hour count
myTimerText[0] = myTimerText[0] + .1

Any help appreciated, ta

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Wxpython, using more than 1 timer?

2006-07-22 Thread nikie
janama wrote:

 Hi all,

 Using wx
 When adding a second timer as i have the first,  the second timer
 adding  stops the first timer (updating or stops?) . In this example im
 updating a uptime and localtime label. It works fine for displaying the
 last self.startTimer2() called. But prevents the previous
 self.startTimer1() from running . Im doing something fundamentally
 wrong i guess?

 def __init__(self, parent):
 self._init_ctrls(parent)

 #Start timers
 self.startTimer1()
 self.startTimer2()

 def startTimer1(self):
 self.t1 = wx.Timer(self)
 self.t1.Start(360) # 36 ms = 1/10 hour
 self.Bind(wx.EVT_TIMER, self.OnUpTime)

 def startTimer2(self):
 self.t2 = wx.Timer(self)
 self.t2.Start(1000) # run every second
 self.Bind(wx.EVT_TIMER, self.OnTime)

 def OnTime(self,evt):
 self.lblTime.SetLabel(str(time.localtime()))

 def OnUpTime(self, evt):
 self.lblUptime.SetLabel('Running ' + (str(myTimerText[0])) + '
 hours') # 1/10  hour count
 myTimerText[0] = myTimerText[0] + .1

 Any help appreciated, ta

The problem is not that the first timer ist stopped, the problem is
that both timers happen to call the same method in the end.

Think of the Bind method as an assignment: it assigns a handler
function to an event source. If you call it twice for the same event
source, the second call will overwrite the first event handler. That's
what happens in your code.

The easiest way to change this is by using different ids for the
timers:

def startTimer1(self):
self.t1 = wx.Timer(self, id=1)
self.t1.Start(2000)
self.Bind(wx.EVT_TIMER, self.OnUpTime, id=1)

def startTimer2(self):
self.t2 = wx.Timer(self, id=2)
self.t2.Start(1000)
self.Bind(wx.EVT_TIMER, self.OnTime, id=2)

This way, the timers launch two different events, which are bound to
two different methods.

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Wxpython, using more than 1 timer?

2006-07-22 Thread janama
Thanks for that, cheers

Regards


nikie wrote:
 janama wrote:

  Hi all,
 
  Using wx
  When adding a second timer as i have the first,  the second timer
  adding  stops the first timer (updating or stops?) . In this example im
  updating a uptime and localtime label. It works fine for displaying the
  last self.startTimer2() called. But prevents the previous
  self.startTimer1() from running . Im doing something fundamentally
  wrong i guess?
 
  def __init__(self, parent):
  self._init_ctrls(parent)
 
  #Start timers
  self.startTimer1()
  self.startTimer2()
 
  def startTimer1(self):
  self.t1 = wx.Timer(self)
  self.t1.Start(360) # 36 ms = 1/10 hour
  self.Bind(wx.EVT_TIMER, self.OnUpTime)
 
  def startTimer2(self):
  self.t2 = wx.Timer(self)
  self.t2.Start(1000) # run every second
  self.Bind(wx.EVT_TIMER, self.OnTime)
 
  def OnTime(self,evt):
  self.lblTime.SetLabel(str(time.localtime()))
 
  def OnUpTime(self, evt):
  self.lblUptime.SetLabel('Running ' + (str(myTimerText[0])) + '
  hours') # 1/10  hour count
  myTimerText[0] = myTimerText[0] + .1
 
  Any help appreciated, ta

 The problem is not that the first timer ist stopped, the problem is
 that both timers happen to call the same method in the end.

 Think of the Bind method as an assignment: it assigns a handler
 function to an event source. If you call it twice for the same event
 source, the second call will overwrite the first event handler. That's
 what happens in your code.

 The easiest way to change this is by using different ids for the
 timers:

 def startTimer1(self):
 self.t1 = wx.Timer(self, id=1)
 self.t1.Start(2000)
 self.Bind(wx.EVT_TIMER, self.OnUpTime, id=1)

 def startTimer2(self):
 self.t2 = wx.Timer(self, id=2)
 self.t2.Start(1000)
 self.Bind(wx.EVT_TIMER, self.OnTime, id=2)

 This way, the timers launch two different events, which are bound to
 two different methods.

-- 
http://mail.python.org/mailman/listinfo/python-list