在python上的wxWizard。去一些页面

时间:2012-07-20 07:46:11

标签: python navigation wizard goto wxwidgets

我正在用wxPython编写一个向导,它的工作非常好。但我还需要一个功能。在最后一个阶段验证用户数据。如果失败,我需要将用户重定向到包含错误数据的页面。 所以,假设我有一个向导和page_1,page_2和page_3。第3页上弹出一个“确定”按钮。按下“确定”按钮后,它应该打开page_1。我该怎么做?或者,至少,我如何模仿向导上的“上一步”按钮?

感谢您的建议!

一些测试代码:

import wx
import wx.wizard

class WizardPage(wx.wizard.PyWizardPage):
    def __init__(self, parent):
        wx.wizard.PyWizardPage.__init__(self, parent)
        self.next = self.prev = None
        self.sizer = wx.BoxSizer(wx.VERTICAL)
        self.SetSizer(self.sizer)

    def SetNext(self, next):
        self.next = next

    def SetPrev(self, prev):
        self.prev = prev

    def GetNext(self):
        return self.next

    def GetPrev(self):
        return self.prev

class Wizard(wx.wizard.Wizard):
    def __init__(self, title):
        wx.wizard.Wizard.__init__(self, None, -1, title)
        self.pages = []

        self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGED, self.onPageChanged)
        self.Bind(wx.wizard.EVT_WIZARD_PAGE_CHANGING, self.onPageChanging)
        self.Bind(wx.wizard.EVT_WIZARD_CANCEL, self.onCancel)
        self.Bind(wx.wizard.EVT_WIZARD_FINISHED, self.onFinished)


    def okButton(self, event):
        answer = wx.MessageBox("Some text", "Error")
        if answer:
            print "GoTo"

    def addPage(self, page):
        if self.pages:
            previous_page = self.pages[-1]
            page.SetPrev(previous_page)
            previous_page.SetNext(page)
        self.pages.append(page)

    def run(self):
        self.RunWizard(self.pages[0])

    def onPageChanged(self, evt):
        pass

    def onPageChanging(self, evt):
       pass

    def onCancel(self, evt):
        page = evt.GetPage()
        print "onCancel: %s\n" % page.__class__

    def onFinished(self, evt):
        'Finish button has been pressed.  Clean up and exit.'
        print "OnWizFinished\n"

def page_1(wiz):
    page = WizardPage(wiz) 

    font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
    font.SetPointSize(20)

    static_text = wx.StaticText(page, -1, "Page 1", style=wx.ALIGN_CENTRE|wx.BORDER_SIMPLE)
    static_text.SetFont(font)

    page.sizer.Add(static_text, 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add(wx.StaticLine(page, -1), 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add((-1, 20))

    wiz.addPage(page)

def page_2(wiz):
    page = WizardPage(wiz) 

    font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
    font.SetPointSize(20)

    static_text = wx.StaticText(page, -1, "Page 2", style=wx.ALIGN_CENTRE|wx.BORDER_SIMPLE)
    static_text.SetFont(font)

    page.sizer.Add(static_text, 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add(wx.StaticLine(page, -1), 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add((-1, 20))

    wiz.addPage(page)

def page_3(wiz):
    page = WizardPage(wiz) 

    font = wx.SystemSettings_GetFont(wx.SYS_SYSTEM_FONT)
    font.SetPointSize(20)

    static_text = wx.StaticText(page, -1, "Page 3", style=wx.ALIGN_CENTRE|wx.BORDER_SIMPLE)
    static_text.SetFont(font)

    page.sizer.Add(static_text, 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add(wx.StaticLine(page, -1), 0, wx.EXPAND|wx.ALL, 5)
    page.sizer.Add((-1, 20))

    test_button = wx.Button(page, 5, "TEST", (50, 20))
    page.sizer.Add(test_button, flag=wx.CENTER|wx.ALL, border=5)
    wiz.Bind(wx.EVT_BUTTON, wiz.okButton, test_button)

    wiz.addPage(page)

if __name__ == '__main__':


    app = wx.PySimpleApp()
    wizard = Wizard("Wizard")

    wizard.SetPageSize((380, 400))

    page_1(wizard)
    page_2(wizard)
    page_3(wizard)


    wizard.run()
    wizard.Destroy()

    app.MainLoop()

0 个答案:

没有答案