Seite 1 von 1
OnInit(self) <-> __init__(self, Variable)
Verfasst: Sonntag 5. Dezember 2004, 00:42
von jens
Möchte gern einer wx.App beim Init eine Variable übergeben... Nun ist es aber so, das man nur diese komische def OnInit(self) hat... Dem kann man wohl nicht so einfach eine zusätzliche Variable unterschieben...
Meine Lösung war es jetzt einfach eine Hilf's def zu machen:
Code: Alles auswählen
def putVar(self, Variable):
self.Variable = Variable
app = MyApp(redirect=False)
app.putVar( "BlaBla" )
app.MainLoop()
Schön ist aber was anderes...
Verfasst: Sonntag 5. Dezember 2004, 13:06
von Leonidas
Wie wär's denn mit sowas:
Code: Alles auswählen
import wx
class VarApp(wx.App):
def __init__(self, *args, **kwargs):
wx.App.__init__(self, *args)
print kwargs
def OnInit(self):
sa = wx.PySimpleApp()
wx.PySimpleApp.OnInit(sa)
return True
a = VarApp(0, myvar='abc')
Und dann kannst du in der VarApp.__init__ mit kwargs machen was du willst (aja, die OnInit musst du selbst anpassen, das ist jetzt ein kleiner Hack).
Verfasst: Montag 6. Dezember 2004, 13:42
von jens
Ist auch nicht schlecht... Allerdings will ich keine Variable, sondern ein Python-Objekt (eine Klasse) übergeben und das schein mit deiner Variante nicht zu funktionieren...
Ah, doch geht wohl:
Code: Alles auswählen
import wx
class VarApp(wx.App):
def __init__(self, MyClass, *args, **kwargs):
wx.App.__init__(self, *args)
self.MyClass = MyClass
def OnInit(self):
[BlaBla]
a = VarApp( MyClass, redirect=False )
Verfasst: Montag 6. Dezember 2004, 13:55
von Leonidas
jens hat geschrieben:Ist auch nicht schlecht... Allerdings will ich keine Variable, sondern ein Python-Objekt (eine Klasse) übergeben und das schein mit deiner Variante nicht zu funktionieren...
Nicht? Also bei mir geht das sehr wohl:
Code: Alles auswählen
import wx
class MyClass:
pass
class VarApp(wx.App):
def __init__(self, *args, **kwargs):
wx.App.__init__(self, *args)
print kwargs
def OnInit(self):
sa = wx.PySimpleApp()
wx.PySimpleApp.OnInit(sa)
return True
# Einmal mit der Klasse
a = VarApp(0, myclass=MyClass)
# und einmal mit einer Instanz einer Klasse
ci = MyClass()
b = VarApp(0, myclass=ci)
Verfasst: Montag 6. Dezember 2004, 14:54
von jens
Hast recht... Komisch... Weiß ich auch nicht was ich da falsch gemacht hab... Allerdings finde ich meine Variante dennoch "schöner" weil man schon bei def __init__() sehen kann, was alles erwartet wird...
Verfasst: Montag 6. Dezember 2004, 15:02
von Leonidas
Okay, dann kannst du **kwargs wegrationalisieren, oder besser, für die initalisierung des wx.Apps weitergeben.
Verfasst: Donnerstag 9. Dezember 2004, 13:43
von jens
Mir ist gerade aufgefallen, das man wx.App.__init__(self, *args, **kwargs) als letztes ausführen sollte, wenn eine Variable/Objekt schon in der OnInit() benötigt wird!
Bsp.:
Code: Alles auswählen
class App(wx.App):
def __init__(self, XRCfile, *args, **kwargs):
self.XRCfile = XRCfile
wx.App.__init__(self, *args, **kwargs)
def OnInit(self):
self.res = wx.xrc.XmlResource( self.XRCfile, wx.xrc.XRC_NO_SUBCLASSING )
if self.res.GetVersion() == -1:
raise 'Datei "%s" nicht gefunden!!!' % self.XRCfile
XRCfile = "\\GUI\\app.xrc"
MyApp = App( XRCfile, redirect=False )
MyApp.MainLoop()