0

私は基本的に 3 つの独立した wxPython GUI を持っており、それらを 1 つのアプリケーションに結合して、各 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 の下にサイザーがないと、右上隅に灰色の四角形が表示されるだけで、クラッシュします。

前もって感謝します!

4

2 に答える 2

0

私はあなたのフレームのそれぞれがあなたが望むコードでそれらの中にパネルを持っていると思います。これらの各フレームからウィジェットのコードを取得し、それらを各Pageクラスに配置するだけです。おそらく、ウィジェットの親を「パネル」などの名前ではなく「自己」に変更する必要があります。

そうすれば、各ページコードベースでフレームを開くことはありません。そこでフレームを開きたくありません。ページをウィジェットの親にし、他の何かを開かないようにします。

于 2013-01-28T20:10:46.237 に答える
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 に答える