Mein Problem ist wie folgt:WxPython Rückgabewert von Assistenten Rahmen Aufruf
Ich bin der Gestaltung eines Assistenten für den Bau eines Objekts zu einer Liste von Objekten in der anrufenden Rahmen meines Programms hinzugefügt werden. Am Ende des Assistenten möchte ich das neu erstellte Objekt an den aufrufenden Rahmen zurückgeben, der in die Liste eingefügt werden soll. Um diese Grundfunktionalität auf einer abstrakten Basis zu simulieren habe ich folgendes konstruiert, abgespeckte App:
mainframe.py
import wx
import wiz_test
class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self,None,title="Main")
panel = wx.Panel(self)
callButton = wx.Button(panel, label = "Call Wizard")
callButton.Bind(wx.EVT_BUTTON,self.launchWizard)
self.Show()
def launchWizard(self,event):
wiz = wiz_test.WizObj(self)
a = 0
if wiz == wx.wizard.EVT_WIZARD_FINISHED:
a = wiz.answer
print a
if __name__ == '__main__':
app = wx.App(False)
frame = MainFrame()
app.MainLoop()
wiz_test.py
import wx
import wx.wizard as wiz
class WizPage(wiz.WizardPageSimple):
def __init__(self, parent):
self.answer = 3
wiz.WizardPageSimple.__init__(self, parent)
sizer = wx.BoxSizer(wx.VERTICAL)
self.SetSizer(sizer)
title = wx.StaticText(self, -1, "Wizard Page")
title.SetFont(wx.Font(18, wx.SWISS, wx.NORMAL, wx.BOLD))
sizer.Add(title, 0, wx.ALIGN_CENTRE|wx.ALL, 5)
sizer.Add(wx.StaticLine(self, -1), 0, wx.EXPAND|wx.ALL, 5)
class WizObj(object):
def __init__(self,parent):
wizard = wx.wizard.Wizard(None, -1, "Simple Wizard")
page1 = WizPage(wizard)
wizard.FitToPage(page1)
wizard.RunWizard(page1)
wizard.Destroy()
if __name__ == "__main__":
app = wx.App(False)
main()
app.MainLoop()
Das ultimative Ziel in dieser Ein kleines Beispiel besteht darin, die MainFrame-Instanz dazu zu bringen, den Wert '3' auszugeben, der von der .answer-Membervariablen der WizObj-Instanz stammt, wenn das Ereignis 'wx.wizard.EVT_WIZARD_FINISHED' ausgelöst wird. Es funktioniert jedoch zu diesem Zeitpunkt eindeutig nicht, da der aktuelle Code nur '0' zurückgibt. Nähme ich mich dem richtigen Weg? Sollte ich stattdessen das EVT_WIZARD_FINISHED-Ereignis binden, und wenn ja, wie würde ich von Mainframe darauf zugreifen?