📜  wxPython-布局管理(1)

📅  最后修改于: 2023-12-03 15:35:45.944000             🧑  作者: Mango

wxPython-布局管理

wxPythonPython 语言的图形界面工具包,它借助于底层的 wxWidgets 库将 Python 程序与本地操作系统的本地窗口管理器集成在一起。其中最重要的是布局管理,可以让我们更轻松地创建和调整用户界面。

常用的布局管理器

常见的布局管理器包括 wx.EmpytSizer()wx.BoxSizer()wx.GridSizer()wx.FlexGridSizer()wx.StaticBoxSizer()wx.GridBagSizer() 六种。

wx.EmpytSizer()

wx.EmpytSizer() 是不将其管理的控件作任何布局调整的基础布局管理器。这个布局管理器通常不用于管理主体部分的窗口控件,但是在管理器的单个项中嵌套多种情况下它是最基础和通用的。当你需要对子控件的位置和大小进行精确的控制时,则可以使用 wx.EmpytSizer()

panel = wx.Panel(self)
sizer = wx.EmptySizer()

button = wx.Button(panel, label="Button")
sizer.Add(button, 0, wx.ALIGN_LEFT|wx.ALL, 5)

panel.SetSizer(sizer)
wx.BoxSizer()

wx.BoxSizer() 使程序员能够以水平或垂直方向来管理窗口控件的布局,用户可以指定每个控件的相对大小,并选择相对于其他控件的对齐方式。

panel = wx.Panel(self)
sizer = wx.BoxSizer(wx.VERTICAL)

button_one = wx.Button(panel, label="Button One")
button_two = wx.Button(panel, label="Button Two")
button_three = wx.Button(panel, label="Button Three")

sizer.Add(button_one, 0, wx.ALL, 5)
sizer.Add(button_two, 0, wx.ALL, 5)
sizer.Add(button_three, 0, wx.ALL, 5)

panel.SetSizer(sizer)
wx.GridSizer()

wx.GridSizer() 布局管理器以行列形式排列窗口控件。这允许用户在需要添加许多控件到应用程序窗口时,以相对干净的方式进行管理。

panel = wx.Panel(self)
sizer = wx.GridSizer(rows=3, cols=3, gap=(3, 3))

button_one = wx.Button(panel, label="Button One")
button_two = wx.Button(panel, label="Button Two")
button_three = wx.Button(panel, label="Button Three")

sizer.Add(button_one, 0, wx.ALL, 5)
sizer.Add(button_two, 0, wx.ALL, 5)
sizer.Add(button_three, 0, wx.ALL, 5)

panel.SetSizer(sizer)
wx.FlexGridSizer()

wx.FlexGridSizer() 生成了一个网格,可以在该网格中指定每个单元格的大小。它可以用于更复杂的窗口布局,其中控件尺寸和位置具有更多的灵活性。

panel = wx.Panel(self)
sizer = wx.FlexGridSizer(3, 3, 5, 5)

button_one = wx.Button(panel, label="Button One")
button_two = wx.Button(panel, label="Button Two")
button_three = wx.Button(panel, label="Button Three")

sizer.AddMany([(button_one), (button_two), (button_three)])

panel.SetSizer(sizer)
wx.StaticBoxSizer()

wx.StaticBoxSizer() 允许程序员放置一个控件小组到带有标签的静态框中。这种布局管理器使得控件组可以几乎无限制地塞满整个窗口。

panel = wx.Panel(self)
outerSizer = wx.BoxSizer(wx.VERTICAL)
staticbox = wx.StaticBox(panel, label="Text Field")
innerSizer = wx.StaticBoxSizer(staticbox, wx.VERTICAL)

text = wx.TextCtrl(panel, wx.ID_ANY, "")
button = wx.Button(panel, wx.ID_ANY, "OK")

innerSizer.Add(text, 0, wx.ALL|wx.EXPAND, 5)
innerSizer.Add(button, 0, wx.ALL|wx.EXPAND, 5)

outerSizer.Add(innerSizer, 1, wx.ALL|wx.EXPAND, 10)

panel.SetSizer(outerSizer)
wx.GridBagSizer()

wx.GridBagSizer() 是最灵活的布局管理器之一,允许程序员在水平和垂直方向上调整所有窗口控件的大小和位置。它还允许程序员定义单个单元格内的行,列,高度和宽度。

panel = wx.Panel(self)
outerSizer = wx.BoxSizer(wx.VERTICAL)
sizer = wx.GridBagSizer(horizontalGap=5, verticalGap=5)

text = wx.TextCtrl(panel, wx.ID_ANY, "")
button_one = wx.Button(panel, wx.ID_ANY, "OK")
button_two = wx.Button(panel, wx.ID_ANY, "Cancel")

sizer.Add(text, pos=(0, 0), span=(1, 2), flag=wx.EXPAND|wx.ALL, border=5)
sizer.Add(button_one, pos=(1, 0), flag=wx.EXPAND|wx.ALL, border=5)
sizer.Add(button_two, pos=(1, 1), flag=wx.EXPAND|wx.ALL, border=5)

outerSizer.Add(sizer, 1, wx.ALL|wx.EXPAND, 10)

panel.SetSizer(outerSizer)
结语

wxPython 提供了很多不同的布局管理器来帮助我们管理用户界面,以上六种是最常用与最基础的布局管理器。使用这些布局管理器可以让我们更加轻松地创建和调整用户界面,而不必手动调整每个控件的大小和位置。