我可以/如何创建一个类面板并在我的主框架(wxpython)中使用它

我可以/如何创建一个类面板并在我的主框架(wxpython)中使用它,wxpython,frames,panels,Wxpython,Frames,Panels,我当前的设置 class AppFrame(wx.Frame): def__init__(self,parent,id=-1,title='program'): wx.Frame.__init__(self,parent,id,title,size=((400,400))) # Panels self.AppPanel = wx.Panel(self,-1) self.AppPanel.SetBackgroundColour

我当前的设置

class AppFrame(wx.Frame):
    def__init__(self,parent,id=-1,title='program'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))
        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

class NBPanel(wx.Notebook):
     def__init__(etc)
如何在我的AppFrame中添加这个NBPanel类(我正在尝试制作一个笔记本面板),以便它在我的AppFrame中显示两个面板。当我试图弄明白这一点时,我的头脑发疯了。我想让NBPanel类成为AppPanel的子类吗

例如:

class AppFrame(wx.Frame):
    def__init__(self,parent,id=-1,title='Mango'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))

        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

        **self.AppPanel2 = NBPanel(self.AppPanel,-1)**
我尝试了一些变化,基本上得到了一些错误


顺便说一句,(AppPanel)并不像这段代码所显示的那样裸露,它有一个大小调整器,设置为左垂直,有几个按钮等等。我希望笔记本面板占据AppFrame的大部分中间区域,因为我仍然需要在笔记本面板的右侧添加另一个面板。

您仍然需要覆盖整个框架的面板,如果面板是框架的唯一子级,这将自动发生

要获得所需的布局,您需要在水平框大小调整器中安排内容(
wx.BoxSizer(wx.horizontal)
)。如果您先添加带有按钮的sizer,然后添加NBPanel,然后在右侧添加所需的面板,接下来您应该会得到所需的布局

所有这些控件都需要AppPanel作为父控件,并且需要将水平大小调整器设置为AppPanels大小调整器

要让笔记本占据相框中的大部分空间,您需要将其添加到比例为1的sizer中,并将其他项目添加到比例为0的sizer中

如果这能让事情变得更清楚,我很乐意做一个快速演示:)

编辑: 这里有一个快速的例子,应该为你想要的布局提供一个概要,如果你有任何问题,请告诉我。此外,它非常棒,提供了大量的示例,让您可以开始使用不同的程序和布局

import wx

class NoteBookPage(wx.Panel):
    def __init__(self,parent,message):
        wx.Panel.__init__(self,parent)
        sizer= wx.BoxSizer(wx.VERTICAL)
        message= wx.StaticText(self,label=message)
        sizer.Add(message,1,wx.ALIGN_CENTRE)
        self.SetSizer(sizer)


class AppFrame(wx.Frame):
    def __init__(self,parent,id=-1,title='program'):
        wx.Frame.__init__(self,parent,id,title,size=((400,400)))
        # Panels
        self.AppPanel = wx.Panel(self,-1)
        self.AppPanel.SetBackgroundColour('grey')

        main_sizer= wx.BoxSizer(wx.HORIZONTAL)

        button_sizer= wx.BoxSizer(wx.VERTICAL)

        #buttons
        self.button1= wx.Button(self.AppPanel,label="Button 1")
        button_sizer.Add(self.button1,0,wx.EXPAND)
        self.button2= wx.Button(self.AppPanel,label="Button 2")
        button_sizer.Add(self.button2,0,wx.EXPAND)
        self.button3= wx.Button(self.AppPanel,label="Button 3")
        button_sizer.Add(self.button3,0,wx.EXPAND)
        main_sizer.Add(button_sizer,0,wx.ALL,5)

        #notebook
        self.Notebook= wx.Notebook(self.AppPanel)
        page1= NoteBookPage(self.Notebook,"I'm on page 1")
        page2= NoteBookPage(self.Notebook,"I'm on page 2")
        self.Notebook.AddPage(page1,"Page 1")
        self.Notebook.AddPage(page2,"Page 2")
        main_sizer.Add(self.Notebook,1,wx.ALL|wx.EXPAND,5)

        #panel on the right (I'm just re-using the NoteBookPage panel to save making a new one)
        right_panel= NoteBookPage(self.AppPanel,"right panel")
        main_sizer.Add(right_panel,0,wx.ALL,5)

        self.AppPanel.SetSizer(main_sizer)

        self.Show()

if __name__ == "__main__":
    app= wx.App(False)
    frame= AppFrame(None)
    app.MainLoop()

我将不胜感激。看到代码将真正帮助我理解这个过程。