我正在用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()