我正在尝试使用wxWizard类创建一个简单的安装程序。在第一页(第0页)我想有3个选项
1. Install (click Next goes to page install1)
2. Upgrade (click Next goes to page upgrade1)
3. Remove (click Next goes to page remove1)
由于我缺乏OOP(以及一般编程)的经验,我无法理解如何创建可以执行此操作的page0对象。
如果我在install1之前创建page0:未定义全局名称“install1”
如果我在page0之前创建install1:超出最大递归深度
如果我在http://xoomer.virgilio.it/infinity77/wxPython/wizard/wx.wizard.html查看课程SkipNextPage:有一个时髦的GetNext()
方法也无法理解。
请帮忙!
import wx
import wx.wizard
class InstallPage_Dyn(wx.wizard.PyWizardPage):
def __init__(self, parent, title):
wx.wizard.PyWizardPage.__init__(self, parent)
self.next = self.prev = None
class InstallPage0(wx.wizard.PyWizardPage):
def __init__(self, parent, title):
wx.wizard.PyWizardPage.__init__(self, parent)
self.next = self.prev = None
self.box = wx.RadioBox (self, -1, 'Choose one of the options below and hit Next\n', choices=['Install','Upgrade','Remove'], style = wx.VERTICAL | wx.EXPAND)
# Set Next button based on user choice
self.box.Bind(wx.EVT_RADIOBOX, self.SetNext(install1))
# Setter and getter methods to specify Next and Previous buttons#
def SetNext(self, next):
userchoice = self.box.GetSelection()
if userchoice == 0:
self.SetNext(install1)
elif userchoice == 1:
self.SetNext(upgrade1)
elif userchoice == 2:
self.SetNext(remove1)
def SetPrev(self, prev):
return self.prev
def GetNext(self):
return self.next
def GetPrev(self):
return self.prev
# Define application and create the wizard
app = wx.App()
wizard = wx.wizard.Wizard(None, -1, "Installer")
wizard.SetPageSize((500,350))
# User selected install. Create the pages
install1 = InstallPage_Dyn(wizard, "Install")
upgrade1 = InstallPage_Dyn(wizard, "Upgrade")
remove1 = InstallPage_Dyn(wizard, "Remove")
# Create page instances
page0 = InstallPage0(wizard, "Installer")
wizard.RunWizard(page0)
答案 0 :(得分:1)
试试这个
class InstallPage_Dyn(wx.wizard.PyWizardPage):
def __init__(self, parent, title):
wx.wizard.PyWizardPage.__init__(self, parent)
self.title = wx.StaticText(self,-1,title)
self.title.SetFont(wx.Font(40,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD))
self.next = self.prev = None
def SetPrev(self,prev):
self.prev = prev
def GetPrev(self):
return self.prev
class InstallPage0(wx.wizard.PyWizardPage):
def __init__(self, parent, title,optional_panels = {}):
wx.wizard.PyWizardPage.__init__(self, parent)
self.prev = self
self.next = optional_panels.values()[0]
self.box = wx.RadioBox (self, -1, 'Choose one of the options below and hit Next\n', choices=optional_panels.keys(), style = wx.VERTICAL | wx.EXPAND)
self.opts = optional_panels.keys()
self.pages = optional_panels.values()
for p in self.pages:
p.SetPrev(self)
self.next = self.pages[0]
self.optional_panels = optional_panels
def GetNext(self):
return self.pages[self.box.GetSelection()]
def GetPrev(self):
return self.prev
...
page0 = InstallPage0(wizard, "Installer",{'install':install1,'upgrade':upgrade1,'remove':remove1})
wizard.RunWizard(page0)
#app.MainLoop()
这里是完整的代码...将其命名为wiz.py
并运行它
import wx
import wx.wizard
class InstallPage_Dyn(wx.wizard.PyWizardPage):
def __init__(self, parent, title):
wx.wizard.PyWizardPage.__init__(self, parent)
self._title = title
self.title = wx.StaticText(self,-1,title)
self.title.SetFont(wx.Font(40,wx.FONTFAMILY_DEFAULT,wx.FONTSTYLE_NORMAL,wx.FONTWEIGHT_BOLD))
self.next = self.prev = None
def SetPrev(self,prev):
self.prev = prev
def GetPrev(self):
return self.prev
class InstallPage0(wx.wizard.PyWizardPage):
def __init__(self, parent, title,optional_panels = {}):
wx.wizard.PyWizardPage.__init__(self, parent)
self.prev = self
self.next = optional_panels[0]
options = [p._title for p in optional_panels]
self.box = wx.RadioBox (self, -1, 'Choose one of the options below and hit Next\n', choices=options, style = wx.VERTICAL | wx.EXPAND)
self.pages = optional_panels
for p in self.pages:
p.SetPrev(self)
self.next = install1
self.optional_panels = optional_panels
def SetPrev(self, prev):
self.prev = prev
return self.prev
def GetNext(self):
return self.pages[self.box.GetSelection()]
def GetPrev(self):
return self.prev
# Define application and create the wizard
app = wx.App(redirect=False)
wizard = wx.wizard.Wizard(None, -1, "Installer")
wizard.SetPageSize((500,350))
# User selected install. Create the pages
install1 = InstallPage_Dyn(wizard, "Install")
upgrade1 = InstallPage_Dyn(wizard, "Upgrade")
remove1 = InstallPage_Dyn(wizard, "Remove")
# Create page instances
page0 = InstallPage0(wizard, "Installer",[install1,upgrade1,remove1])
wizard.RunWizard(page0)