run.byがなくてもButton.byが動作するようにする
デモの中にあるButtonは、ウィンドウ上に3つのボタンを表示させる。このシンプルなコードを改造して、一つのソースファイルだけで独立に動作できるようにする。
ここでまず、Button.pyの中で必要のない部分を削ぎ落とす。ボタンは1つだけ表示するようにした(写真参照)。
それが、以下のButton2.pyになる。
import wx #----------------------------------------------------------------- class TestPanel(wx.Panel): def __init__(self, parent): wx.Panel.__init__(self, parent, -1, style=wx.NO_FULL_REPAINT_ON_RESIZE) b = wx.Button(self, 1, "HELLO AGAIN!", (20, 80)) self.Bind(wx.EVT_BUTTON, self.OnClick, b) b.SetToolTipString("This is a Hello button...") def OnClick(self, event): print 'OK!' #----------------------------------------------------------------- def runTest(frame, nb, log): win = TestPanel(nb) return win #----------------------------------------------------------------- if __name__ == '__main__': import sys,os import run run.main(['', os.path.basename(sys.argv[0])] + sys.argv[1:])
これを次のように変えてみた(Button3.py)。
import wx #----------------------------------------------------------------- class TestPanel(wx.PySimpleApp): def OnInit(self): self.Frm = wx.Frame(None, -1, "Test" ) self.Frm.Show() b = wx.Button(self.Frm, 1, "HELLO AGAIN!", (20, 80)) self.Bind(wx.EVT_BUTTON, self.OnClick, b) b.SetToolTipString("This is a Hello button...") return 1 def OnClick(self, event): print 'OK!' #----------------------------------------------------------------- app = TestPanel() app.MainLoop()
これで一様動くようになった。
しかし、__init__ とOnInitの違いの理解や、文法的なことなどまだまだ課題は多い。
春風はるかさんのwebページの『2-3:ボタンの表示』を参考にさせていただきました。