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

时间:2015-04-15 11:48:10

标签: python wxpython wxwidgets

我想知道如何(而不是使用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上看起来不错,但是Mint与XFCE和Windows(任何版本)的空格不相等。所以我想知道,如何在每个操作系统上布置我的元素看起来完全相同?

我可以以某种方式(以及如何?)计算每个操作系统上水平间距的大小相等吗?

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

在Windows上,根本不是那么好......:http://s23.postimg.org/4et87799n/win.png

当然,我可以为不同的操作系统准备版本,但我想让它自动适合

1 个答案:

答案 0 :(得分:0)

在看到您发送的图片后,我可以说GridBagSizer是最符合您要求的尺码。

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

而且wx.ALL会覆盖wx.LEFT,因此您可以删除wx.LEFT wx.ALL与{{1}}一起使用的位置。