BoxSizer布局

"""
boxsizer布局 测试代码
"""

import wx

class Example(wx.Frame):
    def __init__(self,parent,title):
        wx.Frame.__init__(self,parent=parent,title=title,size=(500,300))

        panel=wx.Panel(self,-1)

        # 新建竖直的box,作为主box
        vbox=wx.BoxSizer(wx.VERTICAL)

        # 新建水平的box
        hbox1=wx.BoxSizer(wx.HORIZONTAL)

        # 新建一个静态文本
        st1=wx.StaticText(panel,label="项目目录")
        
        # 将新建的静态文本键入到水平box中
        # flag表示要被修饰的边框的位置
        # flag是右边表示右边的边框距hbox1的另一个组件距离为8?
        # 还是边框为8,还没弄清楚
        hbox1.Add(st1,flag=wx.RIGHT,border=8)

        # 新建一个文本框
        tc=wx.TextCtrl(panel)
        # 将这个文本框也加到水平box中
        hbox1.Add(tc,proportion=1)

        # 将水平的子box加入到竖直的总box中
        # 这个水平box距离整个panel的左右上边框距离都是10
        vbox.Add(hbox1,flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP,border=10)

        # 添加分隔符
        vbox.Add((-1,10))

        # 新建一个水平的子box
        hbox3=wx.BoxSizer(wx.HORIZONTAL)

        # 新建一个文本框
        tc2=wx.TextCtrl(panel,style=wx.TE_MULTILINE)

        # 将文本框插入到新的水平子box中
        # EXPAND表示填充屏幕?
        hbox3.Add(tc2,proportion=1,flag=wx.EXPAND)

        # 将第二个水平子box插入到竖直总box中,左右边框距窗口10
        vbox.Add(hbox3,proportion=1,flag=wx.LEFT|wx.RIGHT|wx.EXPAND,border=10)
        vbox.Add((-1,25))

        # 新建水平box
        hbox4=wx.BoxSizer(wx.HORIZONTAL)
        # 新建checkbox
        cb1=wx.CheckBox(panel,label="Case Sensitive")
        hbox4.Add(cb1)

        cb2=wx.CheckBox(panel,label="Nested Classes")
        hbox4.Add(cb2,flag=wx.LEFT,border=10)

        cb3=wx.CheckBox(panel,label="Non-Project class")
        hbox4.Add(cb3,flag=wx.LEFT,border=10)

        # 将三个checkbox都放入水平box中
        # 再将这个水平box存入竖直中box中
        vbox.Add(hbox4,flag=wx.LEFT,border=10)
        vbox.Add((-1,25))

        hbox5=wx.BoxSizer(wx.HORIZONTAL)
        btn1=wx.Button(panel,label="ok",size=(70,30))
        hbox5.Add(btn1)

        btn2=wx.Button(panel,label="close",size=(70,30))
        hbox5.Add(btn2,flag=wx.LEFT|wx.BOTTOM,border=5)

        # 装按钮的水平box靠右放
        # ALIGN_RIGHT表示靠右对齐
        # RIGHT表示距右边留出宽度为10的间隔
        vbox.Add(hbox5,flag=wx.RIGHT|wx.ALIGN_RIGHT,border=10)

        # 在Panel中完成布局的设置
        panel.SetSizer(vbox)

        self.Centre()


if __name__=="__main__":
    app=wx.App()
    frame=Example(None,"BoxSizer test")
    frame.Show()
    app.MainLoop()

原文地址:https://www.cnblogs.com/wangtianning1223/p/14116485.html