wxPython布局管理

在前一篇文章中使用了绝对布局,这里主要学习盒子布局。

wxPython提供了布局管理器类帮助实现界面布局,主要分为盒子布局管理器和网格布局管理器。

盒子布局管理器类是wx.BoxSizer,Box布局管理器是最常用的布局管理器,它可以让子窗口沿垂直或者水平方向布局。

主要构造方法如下:

wx.BoxSizer(wx.HORIZONTAL) #水平方向布局
wx.BoxSizer(wx.VERTICAL) #垂直方向布局

使用wx.BoxSizer对象的Add()方法添加子窗口到父窗口,其语法说明如下:

Add(window,proportion=0,flag=0,border=0) #添加到父窗口
Add(sizer,proportion=0,flag=0,border=0) #添加到另外一个布局对象

其中:proportion参数用于设置当前子窗口在父窗口中所占的空间比例,flag参数是布局标志,用来控制对齐方式、边框和调整尺寸,border参数用于设置边框的宽度。

flag对齐标志如下表所示:

示例:

import wx
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None,title="盒子布局",size=(400,300))
        panel=wx.Panel(parent=self)
        self.statictext=wx.StaticText(parent=panel,label='请单击OK!')
        b=wx. Button(parent=panel,label='OK')
        self.Bind(wx.EVT_BUTTON,self.on_click,b)
        vbox=wx.BoxSizer(wx.VERTICAL) #垂直方向布局
        vbox.Add(self.statictext,proportion=1,
                 flag=wx.ALIGN_CENTER_HORIZONTAL|wx.FIXED_MINSIZE|wx.TOP,
                 border=30)
        vbox.Add(b,proportion=1,flag=wx.EXPAND|wx.BOTTOM,border=10)
        panel.SetSizer(vbox)
    def on_click(self,event):
        self.statictext.SetLabelText('Hello World!')
app = wx.App()
frm=MyFrame()
frm.Show()
app.MainLoop()

盒子布局管理器嵌套

一个包含两个按钮,和一个静态文本窗口的示例 :

import wx
class MyFrame(wx.Frame):
    def __init__(self):
        super().__init__(None,title="盒子布局嵌套",size=(300,120))
        panel=wx.Panel(parent=self)
        self.statictext=wx.StaticText(parent=panel,label='请单击按钮!')
        b1=wx. Button(parent=panel,id=10,label='YES')
        b2=wx. Button(parent=panel,id=11,label='NO')
        hbox=wx.BoxSizer(wx.HORIZONTAL)
        hbox.Add(b1,proportion=1,
                 flag=wx.EXPAND|wx.ALL,
                 border=10)
        hbox.Add(b2,proportion=1,
                 flag=wx.EXPAND|wx.ALL,
                 border=10)
        vbox=wx.BoxSizer(wx.VERTICAL)
        vbox.Add(self.statictext,proportion=1,
                 flag=wx.CENTER|wx.FIXED_MINSIZE|wx.TOP,
                 border=10)
        vbox.Add(hbox,proportion=1,flag=wx.CENTER)
        panel.SetSizer(vbox)
        self.Bind(wx.EVT_BUTTON,self.on_click,id=10,id2=20)
    def on_click(self,event):
        event_id=event.GetId()
        print(event_id)
        if event_id==10:
            self.statictext.SetLabelText('欢迎您!')
        else:
            self.statictext.SetLabelText('退出成功!')
app = wx.App()
frm=MyFrame()
frm.Show()
app.MainLoop()

 上述代码首先将两个按钮(b1、b2)放到了一个水平盒子布局管理器对象(hbox)中,然后静态文本和(hbox)放到一个垂直方向的盒子布局管理器对象(vbox)中。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Roy Teng

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值