怎么判断水平结构和垂直结构(wxPython - 布局管理之水平布局和垂直布局)

Posted

篇首语:好汉做事干到底,好马登程跑到头。本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么判断水平结构和垂直结构(wxPython - 布局管理之水平布局和垂直布局)相关的知识,希望对你有一定的参考价值。

怎么判断水平结构和垂直结构(wxPython - 布局管理之水平布局和垂直布局)

实战wxPython系列-010

在现代GUI桌面程序开发中,一般都有对GUI交互窗口中的控件进行布局的功能,在布局管理中,最常见的两种布局就是水平布局和垂直布局,顾名思义,在水平布局中,所有控件从左到右水平排列,在垂直布局中,控件从上到下垂直排列。

在PyQt或者PySide中,通过QHBoxLayout来实现水平布局,通过QVBoxLayout来实现垂直布局,类似的,在wxPython中,我们使用wx.BoxSizer来实现水平和垂直布局。


一、wx.BoxSizer

wx.BoxSizer调制器的基本思路是,在一行或者一列中,窗口通常会以简单的几何形状进行布局,通过将一个sizer进行水平和垂直布局设置后,放置到已经存在的Sizer中的操作,我们可实现非常复杂的布局。

类Box Sizer的在wxPython的继承关系如图1所示。

图1:wx.BoxSizer继承关系图

wx.BoxSizer的常用方法有:

  • AddSpacer(self, size): 在调整器的主方向上添加不可拉伸空间,更可读的调用方式如下:
If boxSizer.IsVertical():      boxSizer.Add(0, size, 0)else:      boxSizer.Add(size, 0, 0
  • CalcMin(self): 提供计算boxSizer最小值的方法, 它只在内部使用,用户不能调用它。
  • GetOrientation(self): 返回boxSizer的布局方向,其返回值为wx.VERTICAL 或wx.HORIZONTAL。
  • SetOrientation(self, orient): 设置boxSizer的方向, 参数orient的取值为wx.VERTICAL 或wx.HORIZONTAL。
  • RepositionChildren(self, minSize): 通过最近一次调用CalcMin方法和sizer当前可用的总尺寸(m_size)来重新提供boxSizer中子控件的位置。在导出类中,该方法必须重载。

从图1可以看出,wx.BoxSizer继承自wx.Sizer, 因此wx.BoxSizer可调用从wx.Sizer继承而来的方法,比如我们在wx.BoxSizer中最常使用的Add方法,它向Sizer添加一个子控件。wx.BoxSizer最常见的使用方法如下:


box = wx.BoxSizer(orient : interger)box.Add(window : wx.Window, proportion=0 : interger, flag=0 : interger, border = 0 :interger)

参数orient的取值可以为wx.VERTICAL 或wx.HORIZONTAL。通过调用Add方法 来添加一个窗口部件到BoxSizer中。

参数proportion定义小部件在定义方向上变化的比例。假设我们有三个比例为0、1和2的按钮。它们被添加到水平的wx.BoxSizer中。比例为0的按钮不会改变,比例为2的按钮在水平长度是比例为1的按钮长度的两倍。

使用参数flag, 可以进一步配置wx.BoxSizer中小部件的行为, flag可以使用以下参数和这这些参数的组合:

wx.LEFTwx.RIGHTwx.BOTTOMwx.TOPwx.ALL

参数border则可以调整BoxSizer内部子控件之间的距离。

二、样例演示

样例演示代码如下:

import wxclass Example(wx.Frame):    def __init__(self, *args, **kwargs):        super(Example, self).__init__(*args, **kwargs)                #self.SetTitle('实战wxPython: 垂直布局示例')        self.SetTitle('实战wxPython: 水平布局示例')        self.SetSize(400, 300)                self.InitUi()                self.Centre()            def InitUi(self):        panel = wx.Panel(self)                panel.SetBackgroundColour('#4f5049')        #box = wx.BoxSizer(wx.VERTICAL)        box = wx.BoxSizer(wx.HORIZONTAL)                pan1 = wx.Panel(panel)        pan1.SetBackgroundColour('#00eded')                pan2 = wx.Panel(panel)        pan2.SetBackgroundColour('#ed00ed')                box.Add(pan1, wx.ID_ANY, wx.EXPAND | wx.ALL, 10)        box.Add(pan2, wx.ID_ANY, wx.EXPAND | wx.ALL, 10)                panel.SetSizer(box)            def OnQuit(self, e):        self.Close()        def main():    app = wx.App()    window = Example(None)    window.Show()    app.MainLoop()    if __name__ == '__main__':    main()

上面的样例代码演示了怎样使用wx.BoxSizer进行垂直布局,其运行结果如图2所示:

图2:垂直布局演示

box = wx.BoxSizer(wx.VERTICAL) 替换成 box = wx.BoxSizer(wx.HORIZONTAL) 则可以将上述演示样例改成水平布局,其运行结果如图3所示:

图3:水平布局演示


三、wx.StaticBoxSizer

wx.StaticBoxSizer继承自wx.BoxSizer, 其类继承关系如图4:

图4:wx.StaticBoxSizer继承关系图

注意,自从wxWidgets 2.9.1以后,强烈建议使用wx.StaticBoxSizer来创建包含wx.StaticBox件的调节器。

四、本文知识点

  • 使用wx.BoxSizer实现水平和垂直布局;
  • 了解wx.StaticBoxSizer。

请多多关注,评论,收藏,点赞,和转发。

前一篇:wxPython - 布局管理简介及绝对位置布局

相关参考

框架结构体系(框架与剪力墙结构的区别)

...两个方向的框架形成的结构体系,它同时承受竖向荷载和水平荷载。框架结构而剪力墙体系是利用建筑物的墙体(内墙或外墙)做成剪力墙来抵抗水平力,同时它也承受垂直荷载,所以它既受剪力又受弯,所以称为剪力墙。二、...

槽式电缆桥架厂商(槽式桥架桥架价格多少钱一米,桥架结构与品种有哪些)

...(有孔托盘)、梯式(梯架)等,桥架品种分为直线段、水平弯通、水平三通、垂直上弯通、垂直下弯通等。以下内容来源于网络整理。1、槽式桥架当槽式桥架直通的长度<=2000mm,

日本三丰百分表(杠杆表你了解吗?)

...照用途的分类根据表盘安装方向和使用用途,杠杆表分为水平型、垂直型、倾斜型、平行型、通用型以及袖珍型等几种类型。水平型水平型杠杆表为标准型号,使用者的视线和表盘水平读数。水平型使用者视线垂直型垂直型杠杆...

热水循环泵生产商(热水循环泵的结构分析)

...转。热水循环泵的结构:1.热水循环泵为单级单吸悬臂式,水平轴向吸入,垂直向上排出。⒉.壳体的径向部分特别适用于输送高温、高压液体。安装方式为泵体的水平中心支架。3.轴承悬挂体采用大油底壳铸造,用于轴承润滑。同...

热水循环泵生产商(热水循环泵的结构分析)

...转。热水循环泵的结构:1.热水循环泵为单级单吸悬臂式,水平轴向吸入,垂直向上排出。⒉.壳体的径向部分特别适用于输送高温、高压液体。安装方式为泵体的水平中心支架。3.轴承悬挂体采用大油底壳铸造,用于轴承润滑。同...

数控刀架的工作原理(学数控第一课数控车床结构和车削原理)

...结构数控车床按结构分类卧式数控车床卧式数控车床主轴水平置的为卧式数控车床(最为常见的类型,除大型车床外基本都是卧式车床)立式数控车床立式车床立式车床主轴垂直水平面。立式车床主要用于大型重型工件,一般直径1...

旋流器结构图(浅谈坦克动力舱)

...中坦克发动机代表着一个国家大功率车辆动力系统的顶尖水平。发动机在车内的布置方式甚至能反映出一个国家的坦克工业水平。本文通过介绍坦克动力舱的结构和原理,诠释其发展历程。内容可能存在错误,欢迎指正,求关注...

炮塔式铣头(炮塔铣床结构特色)

...法,加工方便、精确;铣床头可在垂直平面内调整±45°,水平面内回转360°,拓展机床加工范围。3、工作台纵、横向有手动进给、机动进给和机动快进三种,机动进给可获得8种不同的进给速度,能满足不同的加工要求;快速进...

炮塔式铣头(炮塔铣床结构特色)

...法,加工方便、精确;铣床头可在垂直平面内调整±45°,水平面内回转360°,拓展机床加工范围。3、工作台纵、横向有手动进给、机动进给和机动快进三种,机动进给可获得8种不同的进给速度,能满足不同的加工要求;快速进...

热水循环多级泵(转载--各类多级离心泵的结构图及工作原理)

...无外乎两个办法,一个是将泵体及导流装置沿泵轴的轴线水平剖分,使其成为上下两部分,这叫水平剖分式多级离心泵;另一个办法是将泵体及液体导流装置沿泵轴方向在叶轮之间以垂直于泵轴的平面剖切成若干个段,这叫分段...