wxPython 布局管理
通过指定以像素为单位的绝对坐标,可以将GUI小部件放置在容器窗口内。这些坐标相对于由其构造函数的大小参数定义的窗口尺寸。小部件在窗口内的位置由其构造函数的 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。
序号 | 类型与描述 |
---|---|
1 | BoxSizer 此sizer允许以行或列的方式排列控件。BoxSizer的布局由其orientation参数确定(可以是wxVERTICAL或wxHORIZONTAL)。 |
2 | GridSizer 如其名,GridSizer对象呈现一个二维网格。控件按从左到右,从上到下的顺序添加到网格槽中。 |
3 | FlexiGridSizer 此sizer也具备二维网格。然而,它在设置控件在单元格中布局时提供了更多的灵活性。 |
4 | GridBagSizer GridBagSizer是一个通用的sizer。它比FlexiGridSizer提供了更多的增强功能。可以将子小部件添加到网格中的特定单元格。 |
5 | StaticBoxSizer StaticBoxSizer将一个sizer放入一个静态框中。它在框的周围提供了一个边框,并在顶部添加了一个标签。 |