wxTimerの使い方
wxPythonでコードを書いていて、一定時間間隔で継続して行う処理の必要がでてきた。そのときは、タイマー機能を使うしかないのでは。Pythonのモジュールにはその機能があるらしい(http://www.python.jp/doc/2.4/lib/timer-objects.html)が、ここではwxTimerでやってみることにする。どちらも似たようなものだろうから。
- スタートとストップの二つのボタンがある。
- スタートを押すと、現在時刻をパネル内に表示する。
- 1秒間隔で表示が変わる。つまり毎秒の時刻を表示する時計だな。
- ストップを押すと時刻の表示の更新が止まる。
これを実装したのが下のコード。
import wx import datetime class MyApp(wx.PySimpleApp): def OnInit(self): width, height = 250, 150 self.Frm = wx.Frame(None, -1, "wxTimer", size=wx.Size(width, height)) VSizer = wx.BoxSizer(wx.VERTICAL) self.TxtCtl1 = wx.TextCtrl(self.Frm, -1, "", size=(235,-1), style=wx.TE_RIGHT) self.Btn1 = wx.Button(self.Frm, -1, "Start") self.Btn2 = wx.Button(self.Frm, -1, "Stop") self.Btn2.Disable() self.Btn1.Bind(wx.EVT_BUTTON, self.TimerStart) self.Btn2.Bind(wx.EVT_BUTTON, self.TimerStop) self.Bind(wx.EVT_TIMER, self.TimerTest) VSizer.Add(self.TxtCtl1, 0, wx.ALL, 2) VSizer.Add(self.Btn1, 0, wx.ALL, 2) VSizer.Add(self.Btn2, 0, wx.ALL, 2) self.Frm.SetSizer(VSizer) self.Frm.Show() return True def TimerStart(self, event): self.t1 = wx.Timer(self) self.t1.Start(1000) # 数字の単位は msec self.Btn2.Enable() def TimerStop(self, event): self.t1.Stop() del self.t1 # ちゃんとdelする。 self.Btn2.Disable() def TimerTest(self, event): now = datetime.datetime.today() self.TxtCtl1.SetValue("%s:%s:%s" % (now.hour, now.minute, now.second)) app = MyApp() app.MainLoop()