Python-GUI-wxPython-布局

发布于:2025-07-05 ⋅ 阅读:(21) ⋅ 点赞:(0)

1 需求


2 接口

  • wx.Sizer().Add()

 

 proportion(比例)参数是一个整数,用于指定当父布局管理器的空间有剩余时,被添加的对象(这里是 general_sizer 及其包含的组件)在布局方向上可以占据的额外空间的比例。

  • 当 proportion 为 0 时,表示无论父布局管理器剩余多少空间,该对象都不会额外扩展去占据这些剩余空间,会保持其原本的最小尺寸。
  • 如果设置为大于 0 的值,比如 1 ,在有多个添加对象且都设置了非零 proportion 值的情况下,剩余空间会按照这些 proportion 值的比例分配给对应的对象。例如,有两个对象,proportion 分别设置为 1 和 2,那么它们会按照 1:2 的比例去分配剩余空间。

间距相关

  • wx.ALL:在对象的上、下、左、右四个方向都应用由第四个参数指定的间距值。例如main_sizer.Add(some_widget, 0, wx.ALL, 5),表示some_widget四周都有 5 像素的间距。
  • wx.TOP:只在对象的顶部应用由第四个参数指定的间距值。
  • wx.BOTTOM:只在对象的底部应用由第四个参数指定的间距值。
  • wx.LEFT:只在对象的左侧应用由第四个参数指定的间距值。
  • wx.RIGHT:只在对象的右侧应用由第四个参数指定的间距值。
  • wx.HORIZONTAL:在对象的左侧和右侧应用由第四个参数指定的间距值,用于控制水平方向的间距 。
  • wx.VERTICAL:在对象的顶部和底部应用由第四个参数指定的间距值,用于控制垂直方向的间距 。

对齐方式相关

  • wx.ALIGN_LEFT:将对象在布局空间中靠左对齐。
  • wx.ALIGN_RIGHT:将对象在布局空间中靠右对齐。
  • wx.ALIGN_TOP:将对象在布局空间中靠顶部对齐。
  • wx.ALIGN_BOTTOM:将对象在布局空间中靠底部对齐。
  • wx.ALIGN_CENTER_VERTICAL:将对象在布局空间中垂直居中对齐 。
  • wx.ALIGN_CENTER_HORIZONTAL:将对象在布局空间中水平居中对齐。
  • wx.ALIGN_CENTER:将对象在布局空间中水平和垂直都居中对齐,等价于同时使用wx.ALIGN_CENTER_VERTICALwx.ALIGN_CENTER_HORIZONTAL

伸展相关

  • wx.EXPAND:使对象在布局方向上(水平或垂直,取决于布局管理器的方向)尽可能地伸展,占据所有可用空间。如果布局管理器是水平方向的BoxSizer,那么添加的对象会在水平方向上填满剩余空间;如果是垂直方向的BoxSizer,则在垂直方向上填满剩余空间 。

换行相关

  • wx.SHAPED:告诉布局管理器,子窗口部件具有不规则形状,布局管理器应相应地调整布局。
  • wx.FIXED_MINSIZE:即使窗口大小改变,也强制子窗口部件保持其最小尺寸。
  • wx.GROW:与wx.EXPAND类似,使对象在布局方向上伸展以填充可用空间。

3 布局:wx.BoxSizer

import wx


class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)

        self.init_ui()

        self.Center()

        self.Maximize()

    def init_ui(self):
        panel = wx.Panel(self)

        sizer = wx.BoxSizer(wx.VERTICAL)

        button1 = wx.Button(panel, label="Button 1")
        button2 = wx.Button(panel, label="Button 2")

        sizer.Add(button1,
                  proportion=1,
                  flag=wx.ALL | wx.EXPAND,
                  border=5)
        sizer.Add(button2,
                  proportion=1,
                  flag=wx.ALL | wx.EXPAND,
                  border=5)

        panel.SetSizer(sizer)


if __name__ == "__main__":
    app = wx.App()
    frame = MyFrame(None, title="wxPython Demo")
    frame.Show()
    app.MainLoop()

4 参考资料