My code is below. The main focus would be on the OnStart method. I want to make sure that a positive integer is entered in the input box. At first I tried an if/else clause, then switched to try/except. Neither is perfect yet, but I was wondering which I should try for in the first place. I figure I need to check for an emptry string, non-numeric strings (maybe these are the same check), 0 and negative numbers (which might also fall into the category of 'anything but a number' because of the negative sign).
Thanks. ------------------------------- import wx class MyTimer(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, 'Timer', style=wx.DEFAULT_FRAME_STYLE ^ wx.RESIZE_BORDER ^ wx.MAXIMIZE_BOX) panel = wx.Panel(self) mainSizer = wx.BoxSizer(wx.VERTICAL) inputSizer = wx.BoxSizer(wx.HORIZONTAL) self.progress = wx.Gauge(panel, wx.ID_ANY, 100, size=(300, 20)) self.status = wx.StaticText(panel, wx.ID_ANY, 'Enter a time.') prompt = wx.StaticText(panel, wx.ID_ANY, 'Time to wait:') self.input = wx.TextCtrl(panel, wx.ID_ANY, size=(20, 20)) self.start = wx.Button(panel, wx.ID_ANY, 'Start') self.reset = wx.Button(panel, wx.ID_ANY, 'Reset') self.reset.Disable() self.timer = wx.Timer(self) mainSizer.Add(self.progress, flag=wx.ALIGN_CENTER | wx.ALL ^ wx.BOTTOM, border=10) mainSizer.Add(self.status, flag=wx.ALIGN_CENTER | wx.ALL, border=10) mainSizer.Add(inputSizer, flag=wx.ALIGN_CENTER | wx.BOTTOM, border=10) inputSizer.Add(prompt, flag=wx.ALIGN_CENTER) inputSizer.Add(self.input, flag=wx.ALIGN_CENTER | wx.LEFT | wx.RIGHT, border=5) inputSizer.Add(self.start, flag=wx.ALIGN_CENTER) inputSizer.Add(self.reset, flag=wx.ALIGN_CENTER) self.Bind(wx.EVT_TEXT_ENTER, self.OnStart, self.input) self.Bind(wx.EVT_BUTTON, self.OnStart, self.start) self.Bind(wx.EVT_TIMER, self.OnTimer, self.timer) self.Bind(wx.EVT_BUTTON, self.OnReset, self.reset) panel.SetSizer(mainSizer) mainSizer.Fit(self) def OnStart(self, event): try: self.time = int(self.input.GetValue()) self.minutes_passed = 1 self.minutes_remaining = self.time - 1 self.start.Disable() self.input.Disable() self.reset.Enable() self.status.SetLabel('%s minute(s) remaining.' % self.time) self.timer.Start(1000) except ValueError: wx.MessageBox('Enter a valid time.', 'Invalid time entered', wx.OK | wx.ICON_ERROR) self.input.Clear() def OnReset(self, event): if self.timer.IsRunning(): self.timer.Stop() self.input.Clear() self.input.Enable() self.start.Enable() self.reset.Disable() self.status.SetLabel('Enter a new time.') self.progress.SetValue(0) self.minutes_passed = 1 def OnTimer(self, event): if self.minutes_remaining != 0: self.progress.SetValue(self.minutes_passed * (100.0 / self.time)) self.status.SetLabel('%s minute(s) remaining.' % self.minutes_remaining) self.minutes_passed += 1 self.minutes_remaining -= 1 else: self.timer.Stop() self.progress.SetValue(self.minutes_passed * (100.0 / self.time)) self.status.SetLabel('%s minute(s) have elapsed.' % self.time) wx.Sound.Play(wx.Sound(r'C:\Windows\Media\notify.wav')) class MyApp(wx.App): def OnInit(self): frame = MyTimer() self.SetTopWindow(frame) frame.Show() return True if __name__ == '__main__': app = MyApp(False) app.MainLoop() -- http://mail.python.org/mailman/listinfo/python-list