0

我基本上有 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 下的 sizer,它只会在右上角放一个灰色方块,有了它们,它就会崩溃。

提前致谢!

4

2 回答 2

0

感谢您的帮助,我得到了这个为我工作。由于我的每个其他 wx 应用程序都有包含我想要的所有小部件的 Panel 类,所以我不需要为每个页面创建类。这是代码:

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()

谢谢您的帮助!

于 2013-01-30T12:49:59.253 回答
0

我假设你的每个框架都有面板,里面有你想要的代码。只需从每个框架中获取小部件的代码并将其放入每个 Page 类中。您可能必须将小部件的父级更改为“self”而不是“panel”或您所称的任何内容。

这样您就不会在每个页面代码库中打开一个框架。你不想在那里打开一个框架。您希望页面成为小部件的父级,而不是打开其他东西。

于 2013-01-28T20:10:46.237 回答