wxPython:为什么我的 wx.GridBagSizer 没有按要求对齐我的小部件?
wxPython: Why is my wx.GridBagSizer not aligning my widgets when told to?
我正在用 wxPython 编写 GUI,并使用 wx.GridBagSizer 来管理布局。我希望某些小部件(如按钮和文本)在各自的网格框中以某种方式对齐。我认为当我将每个小部件添加到 sizer 时提供的 wx.ALIGN_LEFT
和 wx.CENTER
标志可以处理这个问题,但正如您在下面的我的 GUI 图像中看到的那样......它什么也没做。
https://i.imgur.com/qePQ7g2.png(无法嵌入图像,因为我的声誉 <10:c)
编辑: 它应该是这样的:https://i.imgur.com/7TQ6ONe.png
这是我的代码示例,展示了我如何在 sizer 中建立所有图片中的小部件...
我希望 txtComments 居中,其他所有内容右对齐。
sizer = wx.GridBagSizer(0, 0)
sizer.Add(self.txtProblemName, pos = (7, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtNumberOfNodes, pos = (8, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtRouteLength, pos = (9, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtRuntime, pos = (10, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtCreationDate, pos = (11, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtAuthor, pos = (12, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtComments, pos = (7, 4), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.CENTER, border = 0)
self.SetSizerAndFit(sizer)
如果有人知道如何解决这个问题,我将不胜感激。我的 GUI 目前看起来一团糟。如果可能,还提供垂直对齐的修复,而不仅仅是水平对齐。
如果您需要有关我的实施的更多信息,请随时询问。谢谢 :D
尝试删除静态文本项的 wx.EXPAND
标志。该标志告诉 sizer 扩展项目的大小,以便它填充 sizer 为项目提供的 space。如果它正在填充 space 那么就没有空间可以移动它来放置对齐标志。
此外,如果您还不熟悉它,您应该了解 Widget Inspection Tool。它对于诊断 sizer 布局问题非常方便,并为您提供了一种可视化 sizer 以及其中的项目如何在其分配的 space.
中定位的方法
我正在用 wxPython 编写 GUI,并使用 wx.GridBagSizer 来管理布局。我希望某些小部件(如按钮和文本)在各自的网格框中以某种方式对齐。我认为当我将每个小部件添加到 sizer 时提供的 wx.ALIGN_LEFT
和 wx.CENTER
标志可以处理这个问题,但正如您在下面的我的 GUI 图像中看到的那样......它什么也没做。
https://i.imgur.com/qePQ7g2.png(无法嵌入图像,因为我的声誉 <10:c)
编辑: 它应该是这样的:https://i.imgur.com/7TQ6ONe.png
这是我的代码示例,展示了我如何在 sizer 中建立所有图片中的小部件...
我希望 txtComments 居中,其他所有内容右对齐。
sizer = wx.GridBagSizer(0, 0)
sizer.Add(self.txtProblemName, pos = (7, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtNumberOfNodes, pos = (8, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtRouteLength, pos = (9, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtRuntime, pos = (10, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtCreationDate, pos = (11, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtAuthor, pos = (12, 0), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.ALIGN_RIGHT, border = 5)
sizer.Add(self.txtComments, pos = (7, 4), span = (1, 2), flag = wx.EXPAND | wx.ALL | wx.CENTER, border = 0)
self.SetSizerAndFit(sizer)
如果有人知道如何解决这个问题,我将不胜感激。我的 GUI 目前看起来一团糟。如果可能,还提供垂直对齐的修复,而不仅仅是水平对齐。
如果您需要有关我的实施的更多信息,请随时询问。谢谢 :D
尝试删除静态文本项的 wx.EXPAND
标志。该标志告诉 sizer 扩展项目的大小,以便它填充 sizer 为项目提供的 space。如果它正在填充 space 那么就没有空间可以移动它来放置对齐标志。
此外,如果您还不熟悉它,您应该了解 Widget Inspection Tool。它对于诊断 sizer 布局问题非常方便,并为您提供了一种可视化 sizer 以及其中的项目如何在其分配的 space.
中定位的方法