wxPython布局管理


GUI小部件可以通过指定以像素为单位测量的绝对坐标放置在容器窗口内。坐标是相对于由其构造函数的size参数定义的窗口的尺寸。窗口内的窗口部件的位置由其构造函数的 pos 参数定义。

import wx  

app = wx.App()
window = wx.Frame(None, title = "wxPython Frame", size = (300,200))
panel = wx.Panel(window)
label = wx.StaticText(panel, label = "Hello World", pos = (100,50))
window.Show(True)
app.MainLoop()

绝对定位 却是不适合的,因为以下几个原因-

  • 即使窗口大小已调整,窗口小部件的位置也不会更改。

  • 在具有不同分辨率的不同显示设备上,外观可能不一致。

  • 布局中的修改很困难,因为它可能需要重新设计整个表单。

wxPython API提供了布局类,用于在容器内定位小部件的更加优雅的管理。布局管理员比绝对定位的优势是 -

  • 窗口内的小部件会自动调整大小。
  • 确保不同分辨率的显示设备具有统一的外观。
  • 动态添加或删除小部件是可能的,无需重新设计。

布局管理器在wxPython中称为Sizer。Wx.Sizer是所有sizer子类的基类。让我们来讨论一些重要的sizer,比如wx.BoxSizer,wx.StaticBoxSizer,wx.GridSizer,wx.FlexGridSizer和wx.GridBagSizer。

SN 尺寸和说明
1 BoxSizer 此sizer允许按行或按列方式排列控件。BoxSizer的布局由其方向参数决定(wxVERTICAL或wxHORIZONTAL)。
2 GridSizer 顾名思义,一个GridSizer对象呈现一个二维网格。控件按照从左到右和从上到下的顺序添加到网格槽中。
3 FlexiGridSizer 这个sizer也有一个二维网格。但是,它在布置单元格中的控件时提供了更多的灵活性。
4 GridBagSizer GridBagSizer是一个多功能的分级器。它比FlexiGridSizer提供更多增强功能。子窗口小部件可以添加到网格内的特定单元格。
5 StaticBoxSizer 一个StaticBoxSizer把一个box sizer放入一个静态框中。它在盒子周围提供边框以及顶部的标签。