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:ボタンの表示』を参考にさせていただきました。