wxPython BoxSizer

本文通过一个具体示例详细解析了wxPython中BoxSizer的使用方法,包括垂直与水平布局的概念及其实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这是比较常见的介绍wxPython BoxSizer的示例代码,但我看到的翻译都很糟糕,都不知所云。所以我仔细研究了一下,写下自己的看法。

import wx
class Example(wx.Frame):
    def __init__(self,parent,title):
        super(Example,self).__init__(parent,title=title,size=(500,300))
        self.InitUI()
        self.Centre()
        self.Show()
    def InitUI(self):
        panel = wx.Panel(self)
        
        font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
        font.SetPointSize(9)
        
        vbox = wx.BoxSizer(wx.VERTICAL)
        
        hbox1 = wx.BoxSizer(wx.HORIZONTAL)
        st1 = wx.StaticText(panel,label='项目目录:'.decode('utf-8'))
        st1.SetFont(font)      
        hbox1.Add(st1,flag=wx.RIGHT,border=8)
        
        tc = wx.TextCtrl(panel)
        hbox1.Add(tc,proportion=1)
        vbox.Add(hbox1,flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP,border=10)
        
        vbox.Add((-1,10))
        
        hbox3 = wx.BoxSizer(wx.HORIZONTAL)
        tc2 = wx.TextCtrl(panel, style=wx.TE_MULTILINE)
        hbox3.Add(tc2, proportion=1, flag=wx.EXPAND)
        vbox.Add(hbox3, proportion=1, flag=wx.LEFT|wx.RIGHT|wx.EXPAND, 
            border=10)

        vbox.Add((-1, 25))

        hbox4 = wx.BoxSizer(wx.HORIZONTAL)
        cb1 = wx.CheckBox(panel, label='Case Sensitive')
        cb1.SetFont(font)
        hbox4.Add(cb1)
        cb2 = wx.CheckBox(panel, label='Nested Classes')
        cb2.SetFont(font)
        hbox4.Add(cb2, flag=wx.LEFT, border=10)
        cb3 = wx.CheckBox(panel, label='Non-Project classes')
        cb3.SetFont(font)
        hbox4.Add(cb3, flag=wx.LEFT, border=10)
        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)
        vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT, border=10)
        
        panel.SetSizer(vbox)
        
if __name__ == '__main__':
    app = wx.App()
    Example(None,title="RedMineHelper")
    app.MainLoop()
    

这个代码是创造了一个类。

重点从InitUI这个函数开始看。

先是创造了一个Panel。

然后设置字体。

再然后创造了一个垂直的BoxSizer。我的理解是,垂直的BoxSizer里面放置的东西都是竖着放的,后一个在前一个的下面。

同理,水平BoxSizer里面放置的东西就是横着放的,后一个在前一个的右面。

所以,刚刚创建的垂直BoxSizer里面放着的5个水平BoxSizer是竖着放的。

第一个水平BoxSizer,是静态文字。flag参数,定义了这个BoxSizer的那个边框会被设置为border的边框宽度,如这个第一个水平BoxSizer,它的右边有宽度为8

然后一个vbox.Add((-1,10)),添加了10个像素的空白空间


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值