Python 框架和面板中的BoxSizer

Python 框架和面板中的BoxSizer,python,wxpython,boxsizer,Python,Wxpython,Boxsizer,当我创建这样的BoxSizer时: class MyForm(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, wx.ID_ANY, "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX) self.panel=wx.

当我创建这样的BoxSizer时:

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                      "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        self.panel=wx.Panel(self,size=(800,600))
        # create BoxSizer and fill it with elements
它起作用了。 但当我这么做的时候:

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                      "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        panelThree(self)

class panelThree(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent,size=(800,600))
        self.panel=wx.Panel(self,size=(800,600))
        # create BoxSizer and fill it with elements
然后出现了一些问题:所有元素都位于左上角,并且它们彼此重叠。当我想在课堂上使用BoxSizer时,我必须如何使用它?
我只是从这里举了个例子:

问题很可能是您没有将以下小部件添加到sizer:self.panel。如果您不将其添加到sizer中,那么它将打乱您的布局。就我个人而言,我认为你甚至不需要一个面板里面的面板。删除该行将解决此问题:

import wx

class MyForm(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 
                      "App",size=(800,600),style= wx.SYSTEM_MENU | wx.CAPTION | wx.MINIMIZE_BOX | wx.CLOSE_BOX)
        panelThree(self)

class panelThree(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent,size=(800,600))
        self.panel=wx.Panel(self,size=(800,600))
        # create BoxSizer and fill it with elements
        sizer = wx.BoxSizer(wx.VERTICAL)

        for item in range(10):
            btn = wx.Button(self, label="Button %s" % item)
            sizer.Add(btn, 0, wx.ALL|wx.CENTER, 5)

        self.SetSizer(sizer)

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = MyForm()
    frame.Show()
    app.MainLoop()