サイザーを極めたい2(きれいに並んだ!!)

昨日試した方法よりも、かなりきれいに並べられる方法に到達したので記録しておく。
基本的には”サイザーの入れ子”である。
横線は引けるし、画面の中央にパネルを出せるし、でほぼ理想どおりに動いてくれた。
今後はサブパネルを開くときには、これを雛型にしてアプリケーションを構成することにしよう。

import wx
import DoCommand

class NumberDomainFrame(wx.Frame):
    def __init__(self, parent, file_name):
        wx.Frame.__init__(self, parent,
                          title="hoge", size=(300,130))
        p = wx.Panel(self)
        self.file = file_name

        sizer = wx.BoxSizer(wx.VERTICAL)
        
        box = wx.BoxSizer(wx.HORIZONTAL)        
        StTxt1 = wx.StaticText(p, -1, "Number of trees")
        box.Add(StTxt1, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
        self.SpnCtr1 = wx.SpinCtrl(p, -1, '2', min=2, max=1024)
        box.Add(self.SpnCtr1, 1, wx.ALIGN_CENTRE|wx.ALL, 5)

        sizer.Add(box, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5)

        line = wx.StaticLine(p, -1, style=wx.LI_HORIZONTAL)
        sizer.Add(line, 0, wx.GROW|wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5)

        btnsizer = wx.StdDialogButtonSizer()
        
        Btn1 = wx.Button(p, wx.ID_OK)
        btnsizer.AddButton(Btn1)
        Btn2 = wx.Button(p, wx.ID_CANCEL)
        btnsizer.AddButton(Btn2)
        btnsizer.Realize()

        sizer.Add(btnsizer, 0, wx.ALIGN_CENTER_HORIZONTAL|wx.ALL, 5)
        Btn1.Bind(wx.EVT_BUTTON, self.CloseWin)
        Btn2.Bind(wx.EVT_BUTTON, self.CancelWin)

        p.SetSizer(sizer)
        sizer.Fit(p)
        self.CenterOnScreen()


    ### if OK button is pressed, execute command1
    def CloseWin(self, event):
        self.CpuNumber = self.SpnCtr1.GetValue()
        print 'inf> %s' % self.file
        self.Close()

        DoCommand.DoCommand(self.file)

    def CancelWin(self, event):
        print 'inf>  cancelled'
        self.Close()

このクラスを呼び出すときは、以下のようにした。

win = NumberDomainFrame(self, self.file_name)
win.Show(True)