我基本上有 3 个独立的 wxPython GUI,我想将它们组合到一个应用程序中,为每个 GUI 提供自己的笔记本选项卡。我不太确定该怎么做,正在寻找一些建议。我感谢我能得到的任何评论或想法。
我的想法是它应该看起来像这样:
import wx
import OtherFrame
class PageOne(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageOne object", (20,20))
panel=OtherFrame.Panel(parent)
box = wx.BoxSizer(wx.VERTICAL)
panel.SetSizer(self,box)
panel.Layout(self, parent)
class PageTwo(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageTwo object", (40,40))
class PageThree(wx.Panel):
def __init__(self, parent):
wx.Panel.__init__(self, parent)
t = wx.StaticText(self, -1, "This is a PageThree object", (60,60))
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
p = wx.Panel(self)
nb = wx.Notebook(p)
page1 = PageOne(nb)
page2 = PageTwo(nb)
page3 = PageThree(nb)
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App()
MainFrame().Show()
app.MainLoop()
但这会产生一些错误和崩溃。如果没有PageOne下的尺寸器,它只是在右上角放了一个灰色方块,有了它们,它就会崩溃。
提前感谢!
我假设你的每个框架都有面板,里面有你想要的代码。只需从每个框架中获取小部件的代码,并将其放入每个 Page 类中即可。您可能需要将小部件的父级更改为"self"而不是"panel"或任何您称呼它们的内容。
然后,您将不会在每个页面代码库中打开一个框架。你不想在那里打开一个框架。您希望页面成为小部件的父级,而不是打开其他内容。
多亏了你的帮助,我才有了这个为我工作。由于我的其他每个wx应用程序都有带有我想要的所有小部件的面板类,因此我不需要为每个页面创建类。代码如下:
import wx
import OtherFrame1
import OtherFrame2
import OtherFrame3
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, None, title="Simple Notebook Example")
p = wx.Panel(self)
nb = wx.Notebook(p)
page1 = OtherFrame1.Panel(nb)
page2 = OtherFrame2.Panel(nb)
page3 = OtherFrame3.Panel(nb)
nb.AddPage(page1, "Page 1")
nb.AddPage(page2, "Page 2")
nb.AddPage(page3, "Page 3")
sizer = wx.BoxSizer()
sizer.Add(nb, 1, wx.EXPAND)
p.SetSizer(sizer)
if __name__ == "__main__":
app = wx.App(redirect=False)
MainFrame().Show()
app.MainLoop()
感谢您的帮助!