如何将 sizer 放入 wx.SashLayoutWindow

how to put sizer in the wx.SashLayoutWindow

我想在 wx.SashLayoutWindow 中放置一个 sizer。所以我可以在 sizer 中放置一些小部件。这是我的代码。 t1 和 t4 应该水平排列,但它看起来是垂直的,它们不适合 bottomwin。 谁能告诉我在 wx.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)

通常你会想做:

botomwin.SetSizer(sizer)

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

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