如何将sizer放入wx.SashLayoutWindow

时间:2016-11-14 08:29:05

标签: wxpython

我想在wx.SashLayoutWindow中添加一个sizer。所以我可以在sizer中放置一些小部件。这是我的代码。 t1和t4应该排列水平,但它看起来是垂直的,它们不适合bottomwin。 谁能告诉我在sx.SashLayoutWindow中放置sizer的正确方法?非常感谢!

    bottomwin = wx.SashLayoutWindow(self, -1, wx.DefaultPosition, (200, 30), wx.NO_BORDER|wx.SW_3D)
    bottomwin.SetDefaultSize((-1, 45))
    bottomwin.SetOrientation(wx.LAYOUT_HORIZONTAL)
    bottomwin.SetAlignment(wx.LAYOUT_BOTTOM)
    bottomwin.SetBackgroundColour("#808080")
    bottomwin.SetSashVisible(wx.SASH_TOP, True)
    t4 = wx.TextCtrl(bottomwin, -1, "", size=(100, 10), style=wx.TE_MULTILINE | wx.TE_RICH2)
    t1 = wx.Button(bottomwin, -1, "Default Button", size=(80, -1))
    sizer = wx.BoxSizer(wx.VERTICAL)
    sizer.Add(t1, proportion=1, border=0, flag=wx.ALL | wx.EXPAND)
    sizer.Add(t4, proportion=1, border=0, flag=wx.ALL | wx.EXPAND)
    sizer.Fit(bottomwin)
    self.SetSizer(sizer)

1 个答案:

答案 0 :(得分:0)

通常你会这样做:

botomwin.SetSizer(sizer)

而不是使用self。 sizer应该附加到窗口(直接或作为其中一个子sizer),它是您想要管理该sizer的布局和大小的小部件的父级。

但是,在这种情况下,由于wx.SashLayoutWindow派生自wx.Window,因此默认情况下不会使用sizer。它实际上有一些自定义代码,用于根据窗扇行为管理子窗口的大小和位置。因此,您需要在小部件和wx.SashLayoutWindow之间放置一些内容。换句话说,创建一个wx.Panel bottomwin的孩子,通过将小部件指定为父级,将小部件放在面板上,并将大小调整器指定给该面板。