wxpython官方文档中文(第6天25天学会wxPython)

菜单栏和工具栏,在大多数编程语言中,都会提供对应的布局,而工作区域的,需要用布局组件。当然,在wxPython中,大多数组件可用x、y轴坐标进行定位摆放,只是那样要费时费力,还会遇到调整窗口大小时,组件的尺寸和位置不会随之改变的问题,会遇到不同系统上,应用界面不一致的问题。

为此,wxPython提供了布局管理器Sizer,Sizer本身不是一个容器或一个窗口部件,它是一个屏幕布局的算法。真正实现布局的是wx.Sizer的子类,有按行或列布局的箱子布局wx.BoxSizer和wx.StaticBoxSizer;有按网格布局的wx.GridSizer、wx.FlexGridSizer和wx.GridBagSizer。

6.1 箱子布局

箱子布局wx.BoxSizer,是最常见的布局管理器,可支持横向布局和纵向布局。如果要同时支持横向和纵向布局,嵌套wx.BoxSizer就好。wx.StaticBoxSizer是在BoxSizer周围加上了一个静态文本框的显示。wx.BoxSizer的语法为:

box = wx.BoxSizer(orient=wx.HORIZONTAL) box.Add(window=wx.Window, proportion=0, flag=0, border=0, userData=None)

orient值为wx.HORIZONTAL(默认)时,水平排列,为wx.VERTICAL时,垂直排列;

在布局管理器(如wx.BoxSizer)中,用Add()方法添加组件,它的参数说明如下:

window:继承于wx.Window的组件,如Button、StaticText等;

proportion:排列比例,一个布局中所包含的组件的尺寸由其比例所决定,比例为0表示在窗口尺寸变化时保持尺寸不变,其他比例系数表示组件在该布局管理器中的尺寸占比;可以用wx.EXPAND旗标来使得组件占据管理器分配给它的所有空间;

flag:对齐方式。可以设定wx.LEFT(左端对齐)、wx.RIGHT(右端对齐)、wx.TOP(顶部对齐)、wx.BOTTOM(底部对齐)、中心对齐(wx.ALIGN_CENTRE)等多种对齐方式,不同方向之间可以通过竖线符号|组合;wx.EXPAND|wx.ALL 会随着窗口变大而变化;

border:边界,调整组件的边框的宽度(上下左右),一般和flag参数配合使用。

程序清单:boxSizer.py

import wx # 继承Frame class BoxSizer(wx.Frame): def __init__(self, *args, **kwargs): super(BoxSizer, self).__init__(*args, **kwargs) # 初始化窗口UI self.init_ui() def init_ui(self): panel = wx.Panel(self, ) v_box = wx.BoxSizer(wx.VERTICAL) # 姓名 h_box1 = wx.BoxSizer(wx.HORIZONTAL) name_label = wx.StaticText(panel, label="姓名:", style=wx.ALIGN_CENTRE_VERTICAL) name_input = wx.TextCtrl(panel, size=(350, -1)) h_box1.Add(name_label, flag=wx.EXPAND | wx.ALL, border=5) h_box1.Add(name_input, flag=wx.EXPAND | wx.ALL, border=1) # 地址 h_box2 = wx.BoxSizer(wx.HORIZONTAL) address_label = wx.StaticText(panel, label="地址:", style=wx.ALIGN_CENTRE_VERTICAL) address_input = wx.TextCtrl(panel, size=(350, -1)) h_box2.Add(address_label, flag=wx.EXPAND | wx.ALL, border=5) h_box2.Add(address_input, flag=wx.EXPAND | wx.ALL, border=1) # 静态布局 sb = wx.StaticBox(panel, label="个人爱好") interest = wx.StaticBoxSizer(sb, wx.VERTICAL) interest.Add(wx.CheckBox(panel, label="读书"), flag=wx.LEFT | wx.RIGHT, border=10) interest.Add(wx.CheckBox(panel, label="画画"), flag=wx.LEFT | wx.RIGHT, border=10) interest.Add(wx.CheckBox(panel, label="游泳"), flag=wx.LEFT | wx.RIGHT, border=10) # 按钮 btn_box = wx.BoxSizer(wx.HORIZONTAL) submit_btn = wx.Button(panel, label="确定", size=(80, 80)) cancel_btn = wx.Button(panel, label="取消", size=(80, 80)) btn_box.Add(submit_btn, flag=wx.ALL | wx.ALIGN_CENTER, border=10) btn_box.Add(cancel_btn, flag=wx.ALL | wx.ALIGN_CENTER, border=10) # 添加布局 v_box.Add(h_box1, proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_TOP, border=20) v_box.Add(h_box2, proportion=0, flag=wx.ALIGN_LEFT | wx.ALIGN_TOP, border=20) v_box.Add(interest, proportion=0, flag=wx.ALIGN_LEFT, border=20) v_box.Add(btn_box, flag=wx.ALIGN_CENTER | wx.Center, border=20) panel.SetSizer(v_box) self.SetTitle("BoxSizer布局") self.Centre() self.Show(True) def main(): app = wx.App(False) BoxSizer(None) app.MainLoop() if __name__ == "__main__": main()

运行程序之后,弹出的窗口如下:

wxpython官方文档中文(第6天25天学会wxPython)(1)

布局比较直观,在垂直的wx.BoxSizer(wx.VERTICAL)布局里,添加两个水平的BoxSizer和一个垂直的StaticBoxSizer。布局里的flag指定组件的位置,border调整边距。flag=wx.ALIGN_CENTER | wx.Center表示居中对齐。至于组件的应用,将在下一节学习。

好了,箱子布局wx.BoxSizer的内容就说到这了,关注我,下一节更精彩。

码字不易,你的关注和转发是对我最大的鼓励,谢谢!

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,关注我,你就赚到了。我正在分享Python、前端、Java和App方面的干货了。赶紧来围观啊!!!

#python##程序员##好平台好讲师##热搜###

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页