我当前的设置
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)**
我尝试了一些变体,基本上有几种错误。
BTW(AppPanel)并不像这段代码那样裸露,它有一个sizer设置为左 - 垂直,有几个按钮等。我希望笔记本电脑面板占据AppFrame的大部分中间区域,因为我仍然需要在笔记本电脑面板的右侧添加另一个面板。
答案 0 :(得分:1)
你仍然需要一个覆盖整个画面的面板,如果面板是画面的唯一子画面,这将自动发生。
要获得所需的布局,您需要在水平框大小调整器(wx.BoxSizer(wx.HORIZONTAL)
)中排列。如果首先添加带有按钮的sizer,然后添加NBPanel,然后在右边添加你想要的面板,你应该得到所需的布局。
所有这些控件都需要AppPanel作为父控件,您需要将水平sizer设置为AppPanels sizer。
要让笔记本占据框架中的大部分空间,您需要将其添加到比例为1且其他项目为0的sizer中。
如果能让事情更清楚的话,我很乐意将快速演示放在一起:)
这是一个简单的例子,应该给出你想要的布局大纲,如果你有任何问题,请告诉我。还可以看看this guide,这真的很棒,并提供大量示例来帮助您开始使用不同的程序和布局。
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()