wx.BoxSizer布局管理

创建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个像素的空白空间
    布局分析:

    wx.BoxSizer布局管理_第1张图片

    上图中布局实现方法:
    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 wx
    
    class MyApp(wx.App):
    
    	def OnInit(self):
    		frame = MyFrame(parent=None, id=-1, title='ExampleBoxSizer')
    		frame.Show(True)
    		return True
    
    class 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()
    


  • 你可能感兴趣的:(布局管理,BoxSizer)