如何在垂直BoxSizer中设置间隔?

9

我该如何在垂直BoxSizer中设置间距?在GridSizer中,有没有像SetVGap这样设置单元格间垂直间隔(以像素为单位)的相似或替代方法?

4个回答

16

有几种方法可以在sizer中添加空白间隔。

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(widget, proportion=0, style=wx.ALL, border=5)

上面的代码将在所有边缘添加带有5像素边框的小部件。 如果你想在两个小部件之间添加一些空间,可以采取以下任一方式:

sizer = wx.BoxSizer(wx.VERTICAL)
sizer.Add(widget, proportion=0, style=wx.ALL, border=5)
sizer.AddSpacer(10) 
# or sizer.Add((0,0))
sizer.Add(anotherWidget, proportion=0, style=wx.ALL, border=5)

在使用sizer.Add((0,0))时的好处是,如果需要,您可以将其与比例1(一)一起添加,这将把所有后续的小部件推到底部。我使用它来更好地控制小部件的位置。

另请参见http://www.wxpython.org/docs/api/wx.Sizer-class.html


4
使用 sizer.Add((0,0)) 的好处是可以按比例1添加,更简单的方法是调用 AddStretchSpacer()。 - ravenspoint
1
我总是忘记那个。出于某种原因,我看到的(0,0)的例子比AddStretchSpacer()的例子更多。我想这取决于程序员。 - Mike Driscoll
这个可以用,但是添加的空白是白色的。当我添加spacer时,我需要能够看到父容器的背景颜色。我该怎么做? - Dejan Bogatinovski
背景颜色不应该是白色。你应该在 Stack 上发布一个问题,附带一个小的可运行示例以及你正在使用的操作系统和 wxPython 版本。 - Mike Driscoll

5
我想你是指垂直的盒子尺寸调整器,就像这样。
wxBoxSizer * szr = new( wxVERTICAL );

以下调用将添加10像素的“垂直间隙”。
szr->AddSpacer(10);

在Python中,我猜它看起来会像这样:

szr = wx.BoxSizer( wxVERTICAL )

... add stuff above gap

szr.AddSpacer(10)

... add stuff below gap

5
wx.BoxSizer中没有间隙参数(如你所说的GridSizers中有)。创建间隙的方法是通过设置小部件的边框。这可以使用样式wx.ALLwx.BOTTOM和/或wx.TOP来完成。
例如:
szr = wx.BoxSizer(wx.VERTICAL)
szr.Add(self.button_1, 0, wx.TOP|wx.BOTTOM|wx.ALIGN_CENTER_HORIZONTAL, 5)

我会在带有5个点的上下边框的Box中添加一个居中的小部件(在我的代码中为按钮)。

如果您写入以下内容,则会显示:

vgap = 5
szr = wx.BoxSizer(wx.VERTICAL)
szr.Add(self.button_1, 0, wx.TOP, vgap)
szr.Add(self.button_2, 0, wx.TOP, vgap)
szr.Add(self.button_3, 0, wx.TOP, vgap)

你可以使用三个按钮,与使用 SetVGap 所得到的相似,同时你也可以通过设置 vgap 控制插槽之间的间距。
其他答案表明,你也可以在你的小部件之间插入分隔符来获得相同的效果,但如果你想要类似于网格布局的 vgap 效果,这种方式更加简洁(没有额外的"sizer.add"行)。

为什么要踩我?我的回答哪里有问题吗?OP正在询问如何在BoxSizer中放置类似于GridSizer间隙的等效物。间隔器也是有效的,但边框更类似于间隙而不是间隔器,后者更像是额外的小部件(它们被添加并填充额外的插槽)。 - joaquin

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接