2

我正在尝试使用 wxWizard 类创建一个简单的安装程序。在第一页 (page0) 我想有 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查看类 SkipNextPage .wizard.html:有一个时髦的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)
4

1 回答 1

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)
于 2012-09-19T18:17:22.717 回答