在 wxpython 的 BoxSizer 上对齐 GUI 元素 - 等间距

Align GUI elements on wxpython's BoxSizer - equal spacing

我想知道如何(而不是使用 GridBoxSizer)对齐面板上的元素,使元素之间的水平间距相等?现在,我想到了这个:

label1 = wx.StaticText(self, label="Emails Database File:")
label2 = wx.StaticText(self, label="Email Start Number")

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(label1, 0, wx.ALL | wx.LEFT, 5)
sizer.Add(wx.StaticText(self, size=(20, 15)), 0, wx.ALL | wx.LEFT, 5)
sizer.Add(self.txtcontrol1, 1, wx.ALL | wx.LEFT, 5)
sizer.Add(self.chooseFileButton, 0, wx.ALL | wx.LEFT, 5)
mainSizer.Add(sizer, 0, wx.ALL | wx.EXPAND, 5)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(label2, 0, wx.ALL | wx.LEFT, 5)
sizer.Add(wx.StaticText(self, size=(25, 15)), 0, wx.ALL | wx.LEFT, 5)
sizer.Add(self.spin, 1, wx.ALL | wx.LEFT, 5)
sizer.Add(self.button, 0, wx.ALL | wx.LEFT, 5)
mainSizer.Add(sizer, 0, wx.ALL | wx.EXPAND, 5)

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(self.infoLabel, 0, wx.ALL | wx.LEFT, 5)
mainSizer.Add(sizer, 0, wx.ALL | wx.EXPAND, 5)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.infoText, 1, wx.ALL | wx.LEFT, 5)
mainSizer.Add(sizer, 0, wx.ALL | wx.EXPAND, 5)

sizer = wx.BoxSizer(wx.HORIZONTAL)
sizer.Add(self.progressBar, 1, wx.ALL | wx.LEFT, 5)
mainSizer.Add(sizer, 0, wx.ALL | wx.EXPAND, 5)

self.SetSizer(mainSizer)

在带有 KDE 的 Kubuntu 上看起来不错,但是在带有 XFCE 和 Windows(任何版本)的 Mint 上空间不相等。所以我想知道,我怎样才能让我的元素在每个 OS 上看起来完全一样?

我能否以某种方式(以及如何?)计算每个 OS 上的水平间距大小相等?

在 Kubuntu 上它看起来很棒:http://s13.postimg.org/b9340sxbb/kubuntu.png

在 Windows 上,一点也不好...:http://s23.postimg.org/4et87799n/win.png

当然我可以为不同的OS准备版本,但我想让它自动适应

看到您发送的图像后,我可以说 GridBagSizer 是最适合您要求的 sizer。

但是如果您只想使用一堆 BoxSizer 来执行此操作,请使用 AddStretchSpacer 方法而不是在 sizer 中添加空白 StaticText

并且 wx.ALL 覆盖 wx.LEFT,因此您可以删除 wx.LEFTwx.ALL 一起使用的任何地方。