wxPython布局:wx.GridBagSizer网格布局的使用

创建布局

gb = wx.GridBagSizer(vgap=0, hgap=0)

参数分别定义了单元格之间的 行间距 和 列间距,默认为0。

添加控件或其他布局

gb.Add(window, pos, span=DefaultSpan, flag=0, border=0, userData=None)
  • window – 代表要添加的控件或其他布局(Sizer)
  • pos – tuple,定义了控件的位置。如:左上角的位置为 (0,0)
  • span – tuple,指定跨几行或者几列,如: (3,2) 表示让一个控件跨3行和2列
  • flag – 更具体的定义控件在 Sizer 中的行为
  • border – int,单位px。与flag连用改变控件周围的空间

参数 flag 更具体的定义控件在 wx.BoxSizer 中的行为,可以控制控件之间的距离、控件的对齐方式,不同参数可以通过竖线符号 | 组合,可选参数为:

与 border 控制控件之间的距离:
wx.LEFT – 左
wx.RIGHT – 右
wx.BOTTOM – 底部
wx.TOP – 顶部
wx.ALL – 周围

wx.EXPAND – 控件将使用所有剩余的空间

定义控件的对齐方式:
wx.ALIGN_LEFT – 左对齐
wx.ALIGN_RIGHT – 右对齐
wx.ALIGN_TOP – 顶部对齐
wx.ALIGN_BOTTOM – 底部对齐
wx.ALIGN_CENTER_VERTICAL – 竖直居中对齐
wx.ALIGN_CENTER_HORIZONTAL – 水平居中对齐
wx.ALIGN_CENTER – 居中对齐

设置行列自动伸缩

当窗口长宽改变时,组件大小默认不会发生改变:


GridBagSizer布局的可以设置某行某列自动伸缩(需要配合flag=wx.EXPEND, 见原码):

sizer.AddGrowableCol(1)        # 设置第2列自动伸缩
sizer.AddGrowableRow(3)        # 设置第4行自动伸缩

原码
 

import wx


class run(wx.Frame):

    def __init__(self, *args, **kw):
        super().__init__(*args, **kw)
        pnl = wx.Panel(self)        # 创建画板
        box = wx.BoxSizer(wx.VERTICAL)  # 创建垂直Sizer
        sizer = wx.GridBagSizer(10,10)    # 创建网格布局
        # 创建路径控件
        urlTap = wx.StaticText(pnl,label="Url")
        self.tc_url = wx.TextCtrl(pnl,value="")
        pathTap = wx.StaticText(pnl,label="保存路径")
        self.tc_path = wx.TextCtrl(pnl,value="./Video")
        getPathButton = wx.Button(pnl,label="浏览")
        # 将控件加入布局,布局加入Sizer
        sizer.Add(urlTap, pos=(0,0), flag=wx.ALL, border=5)
        sizer.Add(self.tc_url, pos=(0,1), span=(1,3), flag=wx.ALL|wx.EXPAND, border=5)
        sizer.Add(pathTap, pos=(1,0), flag=wx.ALL, border=5)
        sizer.Add(self.tc_path, pos=(1,1), span=(1,2), flag=wx.ALL|wx.EXPAND, border=5)
        sizer.Add(getPathButton, pos=(1,3), flag=wx.ALL, border=5)
        # 添加按钮控件
        but1 = wx.Button(pnl,label="开始",size=(100,30))
        but2 = wx.Button(pnl,label="关闭",size=(100,30))
        sizer.Add(but2,pos=(2,3), flag=wx.ALL, border=5)
        sizer.Add(but1,pos=(2,2), flag=wx.ALL, border=5)
        # 添加文本框
        self.textBox = wx.TextCtrl(pnl,value="现在在做测试!\n",style=wx.TE_READONLY|wx.TE_MULTILINE)
        sizer.Add(self.textBox,pos=(3,0), span=(1,4), flag=wx.ALL|wx.EXPAND, border=5)
        box.Add(sizer,proportion=1,flag=wx.ALL|wx.EXPAND,border=30)
        sizer.AddGrowableCol(1)
        sizer.AddGrowableRow(3)
        pnl.SetSizer(box)


if __name__ == "__main__":
    app = wx.App()
    # 使用自定义框架
    frame = run(None, title="视频爬取")
    frame.Center()
    frame.Show()
    # 启动事件循环
    app.MainLoop()

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值