====== レイアウト配置 ====== 各パーツの配列は、Sizer を使う。 * wx.BoxSizer * wx.GridSizer * wx.FrexGridSizer ---- ===== BoxSizer の例 ===== import os import sys import wx class Panel1(wx.Panel) : def __init__(self, parent, *args, **kwargs) : wx.Panel.__init__(self, parent, wx.ID_ANY) b1a = self.SetButton("Button1-A") b1b = self.SetButton("Button1-B") layout = wx.BoxSizer(wx.VERTICAL) layout.Add(b1a, 2, flag=wx.EXPAND) layout.Add(b1b, 1, flag=wx.EXPAND) self.SetSizer(layout) def SetButton(self, Name) : return wx.Button(self, wx.ID_ANY, Name) class Panel2(wx.Panel) : def __init__(self, parent, *args, **kwargs) : wx.Panel.__init__(self, parent, wx.ID_ANY) b2a = self.SetButton("Button2-A") b2b = self.SetButton("Button2-B") b2c = self.SetButton("Button2-C") bp1 = Panel1(self) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(b2a, 3, flag=wx.EXPAND) layout.Add(b2b, 2, flag=wx.EXPAND) layout.Add(b2c, 4, flag=wx.EXPAND) layout.Add(bp1, 1, flag=wx.EXPAND) self.SetSizer(layout) def SetButton(self, Name) : return wx.Button(self, wx.ID_ANY, Name) class IntegratePanel(wx.Panel) : def __init__(self, parent, *args, **kwargs) : wx.Panel.__init__(self, parent, wx.ID_ANY) bp1 = Panel1(self) bp2 = Panel2(self) layout = wx.BoxSizer(wx.HORIZONTAL) layout.Add(bp1, 3, flag=wx.EXPAND) layout.Add(bp2, 2, flag=wx.EXPAND) self.SetSizer(layout) class MainFrame(wx.Frame) : def __init__(self) : super().__init__(None, title="Sizer") self.SetSize(1000,1000) self.SetMinSize((500, 500)) self.Center(wx.BOTH) IntegratePanel(self) self.Show() def main() : app = wx.App() frame = MainFrame() app.MainLoop() return if __name__ == '__main__' : main() ===== 自動サイズ調整 ===== wx.EXPAND でサイズ調整される layout = wx.BoxSizer(wx.HORIZONTAL) layout.Add(button, 1, wx.EXPAND) # 0: サイズ変更なし # 1: 自動調整あり。数字は、比率。 import os import sys import wx class Panel(wx.Panel) : def __init__(self, parent, *args, **kwargs) : wx.Panel.__init__(self, parent, wx.ID_ANY) button4 = wx.Button(self, wx.ID_ANY, 'only vertical exapnd', name='button4', size=(200, 50)) layout = wx.BoxSizer(wx.HORIZONTAL) layout.Add(button4, 0, wx.EXPAND) self.SetSizer(layout) class TopPanel(wx.Panel) : def __init__(self, parent, *args, **kwargs) : wx.Panel.__init__(self, parent, wx.ID_ANY) button1 = wx.Button(self, wx.ID_ANY, 'ogriginal Size', name='button1', size=(200, 50)) button2 = wx.Button(self, wx.ID_ANY, 'both vertical and horizontal expand', name='button2', size=(200, 50)) button3 = wx.Button(self, wx.ID_ANY, 'only horizontal exapnd', name='button3', size=(200, 50)) p = Panel(self, wx.ID_ANY) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(button1, 0) layout.Add(button2, 1, flag=wx.EXPAND) layout.Add(button3, 0, flag=wx.EXPAND) layout.Add(p, 1, flag=wx.EXPAND) self.SetSizer(layout) class MainFrame(wx.Frame) : def __init__(self, *args, **kwargs) : super().__init__(None, title="exFrame", **kwargs) topPanel = TopPanel(self) layout = wx.BoxSizer(wx.VERTICAL) layout.Add(topPanel, 1, flag=wx.EXPAND) self.SetSizer(layout) self.SetSize(500,500) self.SetMinSize((100, 100)) self.Center(wx.BOTH) self.Show() def main() : app = wx.App() MainFrame() app.MainLoop() return if __name__ == '__main__' : main()