OnInit(self) <-> __init__(self, Variable)

Plattformunabhängige GUIs mit wxWidgets.
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

OnInit(self) <-> __init__(self, Variable)

Beitragvon jens » Sonntag 5. Dezember 2004, 00:42

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...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Sonntag 5. Dezember 2004, 13:06

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).
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 6. Dezember 2004, 13:42

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 )
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 6. Dezember 2004, 13:55

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)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Montag 6. Dezember 2004, 14:54

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...
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Montag 6. Dezember 2004, 15:02

Okay, dann kannst du **kwargs wegrationalisieren, oder besser, für die initalisierung des wx.Apps weitergeben.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Donnerstag 9. Dezember 2004, 13:43

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()

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder