wx.BoxSizer布局管理

来源:互联网 发布:峰会策划知乎 编辑:程序博客网 时间:2024/06/04 00:27

创建wx.BoxSizer:

hbox = wx.BoxSizer(integer orient)
orient:(垂直方向)wx.VERTICAL 或(水平方向) wx.HORIZONTAL

hbox.Add(wx.Window window, integer proportion=0, integer flag = 0, integer border = 0)
window:需要添加到wx.BoxSizer的控件;

proportion:定义了控件在既定方向上所占空间的比例,是相对的,相对于其他组件,比如:在水平sizer中有三个按钮,porportion=0,表示保持本身大小;porportion=1,表示在水平方向上占三分之一的空间;porportion=2,表示在水平方向上占三分之二的空间。

flag:

flag参数定义了两个主要的行为:

第一个参数是窗口的边框:这个参数决定了边框的宽度,在此决定窗口某一侧添加边框的事件。

另一个参数决定了sizer事件的行为,当sizer改变时,空间的分配。并且分配的多少依赖于特定种类的sizer被使用。

flag参数可以使用 '|'来产生组合的多个flags。

常用的flag参数:

  • wx.TOP
  • wx.BOTTOM
  • wx.LEFT
  • wx.RIGHT
  • wx.ALL
  • wx.EXPAND
  • 如果想在sizer分配给当前控件的空间之内调整控件布局可用下面参数来实现:
  • wx.ALIGN_LEFT 
  • wx.ALIGN_RIGHT
  • wx.ALIGN_TOP
  • wx.ALIGN_BOTTOM
  • wx.ALIGN_CENTER_VERTICAL
  • wx.ALIGN_CENTER_HORIZONTAL
  • wx.ALIGN_CENTER

    border:调整控件的边框的宽度,此参数一般和flag参数配合使用。

    如:hbox.Add(button, porprotion=1, flag=wx.EXPAND | wx.ALL,border= 20)
    flag=wx.EXPAND | wx.ALL,border=20---------这代表的是button这个组件将充分的利用空间,但是会从四周预留出来20px作为border。所以如果说使用了wx.EXPAND标志,而没有设定border,那么我们的组件将充分的利用分配的空间。

    最后,有些情况下我们需要添加一些空白的区域到我们的应用当中,可以使用下面的代码:

     vbox = wx.BoxSizer(wx.VERTICAL) vbox.Add((-1, 20))
    vbox.Add((-1, 20))   # 添加了20个像素的空白空间
    布局分析:


    上图中布局实现方法:
    1、整体上控件布局分上下两个布局,也就是我们需要创建一个垂直方向上的BoxSizer(v_box=wx.BoxSizer(wx.VERTICAL));
    2、在分析上部分的控件的布局,可以看出:静态文本、输入框、三个按钮在同一水平方向上,由此我们需要创建一个水平方向上的BoxSizer布局管理器(h_box=wx.BoxSizer(
    wx.HORIZONTAL));
    3、然后把h_box布局器放到v_box布局管理器;
    4、最后再把wx.TextCtrl控件放入v_box布局管理器。
    小技巧:控件一定要按需要布局的顺序放入BoxSizer布局器中。

    完整实例:

    #!/usr/bin/env python# -*- encoding:utf-8 -*-import wxclass MyApp(wx.App):def OnInit(self):frame = MyFrame(parent=None, id=-1, title='ExampleBoxSizer')frame.Show(True)return Trueclass MyFrame(wx.Frame):def __init__(self, parent, id, title):wx.Frame.__init__(self, parent, id, title, size=(778, 494),                  style=wx.DEFAULT_FRAME_STYLE | wx.RESIZE_BORDER | wx.MAXIMIZE_BOX)self.panel = wx.Panel(self, -1)h_box_sizer = wx.BoxSizer(wx.HORIZONTAL)self.file_path = wx.TextCtrl(self.panel, -1)self.open_button = wx.Button(self.panel, -1, label=u'打开')self.save_button = wx.Button(self.panel, -1, label= u'保存')h_box_sizer.Add(self.file_path, proportion=1, flag=wx.EXPAND | wx.ALL, border=5)h_box_sizer.Add(self.open_button, proportion=0, flag= wx.ALL, border=5)h_box_sizer.Add(self.save_button, proportion=0, flag= wx.ALL, border=5)self.edit_text = wx.TextCtrl(self.panel, style=wx.TE_MULTILINE|wx.TE_RICH2|wx.HSCROLL)v_box_sizer = wx.BoxSizer(wx.VERTICAL)v_box_sizer.Add(h_box_sizer, proportion=0, flag=wx.EXPAND)v_box_sizer.Add(self.edit_text, proportion=1, flag=wx.EXPAND, border=5)self.panel.SetSizer(v_box_sizer)def main():    app = MyApp()    app.MainLoop()if __name__ == '__main__':main()