0

完全是 Python 的新手,因为我几天前才开始学习这门语言(事先没有编程经验)。

我基本上是在把我的头骨撞在桌子上,试图创建一个带有按钮的菜单,该按钮将引导您进入另一个菜单,该菜单应该替换/隐藏/销毁以前的菜单(只要过程可以被反转)。

到目前为止我想出了什么:

import wx


class MainFrame(wx.Frame):

    def __init__(self):
        wx.Frame.__init__(self, None)

        self.Centre()
        self.main_menu = MainMenu(self)
        self.intro_screen = IntroScreen(self)
        self.intro_screen.Hide()


class MainMenu(wx.Frame):

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

        self.main_menu = MainMenu
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)

        nextscreen = wx.Button(panel, label='Next Screen', size=(150,30))
        nextscreen.Bind(wx.EVT_BUTTON, self.NextScreen)
        sizer.Add(nextscreen, 0, wx.CENTER|wx.ALL, 5)

        self.Show()
        self.Centre()

    def NextScreen(self, event):

        self.main_menu.Hide(self)
        self.intro_screen.Show()


class IntroScreen(wx.Frame):

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

        self.intro_screen = IntroScreen
        panel = wx.Panel(self)
        sizer = wx.BoxSizer(wx.VERTICAL)

        gobackscreen = wx.Button(panel, label='Go Back a Screen', size=(150,30))
        gobackscreen.Bind(wx.EVT_BUTTON, self.GoBackScreen)
        sizer.Add(gobackscreen, 0, wx.CENTER|wx.ALL, 5)

        self.Show()
        self.Centre()

    def GoBackScreen(self, event):

        self.intro_screen.Hide()        
        self.main_menu.Show()


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

据我所知,NextScreen 按钮看不到 intro_screen 类,因此无法显示它。但我不知道如何解决这个问题。

事实上,我完全不知道这是否是正确的做法。任何帮助是极大的赞赏

使用 Python 2.7

4

1 回答 1

1

intro_screenMainFrame实例的属性;不是实例MainMenu

您的MainMenu.__init__()方法在MainFrame实例中作为parent. 我不确定是否self.parent由 line 设置wx.Frame.__init__(self, parent=parent),但如果不是,请添加self.parent = parentMainMenu.__init__(

self.parent然后,您可以参考MainMenu实例,以下应该可以工作:

self.parent.intro_screen.Show()

我不确定您为什么将当前类设置为实例属性:

self.main_menu = MainMenu

self.intro_screen = IntroScreen

而不是self.main_menu.Hide(self)你可以调用,不需要self.Hide()对类的引用。

于 2013-05-21T22:01:27.330 回答