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 を作成した場合: 最大再帰深度を超えました.wizard.htmlGetNext() : これも理解できないファンキーなメソッドがあります。

助けてください!

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 に答える