サイザーを極めたい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)