ユーザ用ツール

サイト用ツール


lang:python:wxpython:sizer

レイアウト配置

各パーツの配列は、Sizer を使う。

  • wx.BoxSizer
  • wx.GridSizer
  • wx.FrexGridSizer

BoxSizer の例

sizer.py
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: 自動調整あり。数字は、比率。
sizer2.py
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()
lang/python/wxpython/sizer.txt · 最終更新: by editor

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki