wx.GridBagSizer + wx.StaticBoxSizer:如何自动化跨度计算

时间:2015-04-09 17:50:53

标签: wxpython wxwidgets

我通过使用名为 CreateStaticBoxSizer 的函数生成以下窗口,但StaticBox3在其末尾包含空格,我不希望它。

我希望它不包含空格。我注意到,如果我将StaticBox3的范围设置为7,它会给出我想要的结果,但是想要自动化生成跨度的过程而不是硬编码:

BoxSizer containing space

代码使用基于其创建的项目数量的范围,因此如果它在boxSizer中创建8个项目,则使用8的范围。

我无法理解为什么这个错误有人可以澄清一下吗?跨度应该对应什么?

同样,当StaticBox :: 4侵入StaticBox :: 1的行时,为什么它不像StaticBox :: 3那样扩展呢?

生成此代码的代码如下:

import wx
import wx.lib.inspection
class MyRegion(wx.Frame):
    I = 0
    def __init__(self, parent):
        wx.Frame.__init__(self, parent, title="My Region")
        gridSizer = wx.GridBagSizer()

        gridSizer.Add(self.CreateStaticBoxSizer(4), pos=(0,0), span=(4,1), flag=wx.EXPAND)
        gridSizer.Add(self.CreateStaticBoxSizer(4), pos=(4,0), span=(4,1), flag=wx.EXPAND)
        gridSizer.Add(self.CreateStaticBoxSizer(4), pos=(0,1), span=(4,1), flag=wx.EXPAND)
        gridSizer.Add(self.CreateStaticBoxSizer(8), pos=(0,2), span=(8,1), flag=wx.EXPAND)
        gridSizer.Add(self.CreateStaticBoxSizer(6), pos=(0,3), span=(6,1), flag=wx.EXPAND)

        self.SetSizer(gridSizer)

    def CreateStaticBoxSizer(self, x=4):
        box = wx.StaticBox(parent=self, label="StaticBox::" + str(MyRegion.I))
        MyRegion.I += 1
        sz = wx.StaticBoxSizer(orient=wx.VERTICAL, box=box)
        for i in range(x):
            sz.Add(wx.StaticText(parent=sz.GetStaticBox(),
                                 label="This window is a child of the staticbox"))
        return sz


if __name__ == "__main__":
    app = wx.App()
    frame = MyRegion(None)
    frame.Show()
    wx.lib.inspection.InspectionTool().Show()
    app.MainLoop()

1 个答案:

答案 0 :(得分:1)

您的sizer#3的行间距为8,因此它与sizer#0和#1的总和具有相同的高度,这就是因为两个sizer有2个标签所带来的差距比一个更垂直的空间。

有可能让它工作wxGridBagSizer,但IMO这个sizer应该(几乎)永远不会被使用。对于任何类型的普通布局,您应该使用wxFlexGridSizerwxBoxSizer代替。