wxPython - 通过按钮更改面板

wxPython - change panel by button

我想用 2 个面板编写简单的代码。简单 "Hello" 和旁边的按钮。按钮将面板更改为 panel_2,文本 "Panel 2" 和旁边的按钮。我不知道我怎样才能做到这一点。有我的代码:

import wx


class Glowne(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)

        self.SetSize((800,600))

        tekst = 'HELLO'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
        wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        btn = wx.Button(self, -1, "Change panel", (345, 100))
        self.Bind(wx.EVT_BUTTON, Program.zmiana, btn)

 class Glowne1(wx.Panel):
    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        tekst = 'Panel 2'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
    wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        btn = wx.Button(self, -1, "Change panel", (345, 100))
        #self.Bind(wx.EVT_BUTTON, frame.zmiana, btn)



class Program(wx.Frame):
    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY,'Program')

        panel_one = Glowne(self)
        self.panel_two = Glowne1(self)
        self.panel_two.Hide()
        self.SetSize((800,600))
        self.Centre()
    def zmiana(self):
        self.panel_one.Hide()
        self.panel_two.Show()   
if __name__ == "__main__":
    app = wx.App(False)
    frame = Program()
    frame.Show()
    app.MainLoop()

感谢您的帮助。我阅读了 this tutorial,但我无法在我的简单代码中使用它。

程序框架需要添加一个 sizer,面板需要自己添加到 btn 以便可以从 class 程序访问它们,绑定到 class 程序内的按钮。

这是一个例子

import wx


class Glowne(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent=parent)

        self.SetSize((800, 600))

        tekst = 'HELLO'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
        wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        self.btn = wx.Button(self, -1, "Change panel", (345, 100))


class Glowne1(wx.Panel):

    def __init__(self, parent):
        wx.Panel.__init__(self, parent)

        tekst = 'Panel 2'
        font = wx.Font(18, wx.DEFAULT, wx.NORMAL, wx.NORMAL)
        wx.StaticText(self, -1, tekst, (300, 10)).SetFont(font)

        self.btn = wx.Button(self, -1, "Change panel", (345, 100))


class Program(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None, wx.ID_ANY, 'Program')

        sizer = wx.BoxSizer()
        self.SetSizer(sizer)

        self.panel_one = Glowne(self)
        sizer.Add(self.panel_one, 1, wx.EXPAND)
        self.panel_one.btn.Bind(wx.EVT_BUTTON, self.show_panel_two)
        self.panel_two = Glowne1(self)
        sizer.Add(self.panel_two, 1, wx.EXPAND)
        self.panel_two.btn.Bind(wx.EVT_BUTTON, self.show_panel_one)
        self.panel_two.Hide()
        self.SetSize((800, 600))
        self.Centre()

    def show_panel_one(self, event):
        self.panel_one.Show()
        self.panel_two.Hide()
        self.Layout()

    def show_panel_two(self, event):
        self.panel_two.Show()
        self.panel_one.Hide()
        self.Layout()


if __name__ == "__main__":
    app = wx.App(False)
    frame = Program()
    frame.Show()
    app.MainLoop()