TypeError: OnInit() takes exactly 2 arguments (1 given)

Plattformunabhängige GUIs mit wxWidgets.
Antworten
madRAM
User
Beiträge: 14
Registriert: Sonntag 5. März 2006, 11:28

Das Subject sagt es schon ganz genau.

Ich habe eine Applikation, die ein Fenster aufbaut. Dafuer wird aus Main heraus implizit die OnInit Funktion von wxApp aufgerufen.
Ich habe meine Applikation aber so designed, dass Sie mit einer locale Umgebung arbeiten soll. Diese Locale Umgebung (eine Klasse die je nach Spracheinstellung Texte zurueck gibt) wird an alle Klassen uebergeben.

Wenn ich das unten dargestellte Snippet ohne locale aufrufe (nachdem es so umprogrammiert wurde, dass alle Texte statisch sind) funktioniert es. Wenn ich dann aber die locale Umgebung mit uebergeben will, dann kommt die Fehlermeldung aus dem Subject.

Ist doch komisch oder? Ich uebergebe ja sogar noch mehr Parameter an OnInit als ohne das locale Objekt und er meckert trotzdem an, ich wuerde zu wenige Parameter uebergeben.

Code: Alles auswählen

# CONSTANTS
_TITLE    = "BootImageMaker: Create Image"

class MyApp(wxApp):
	"""
	Application class
	"""
	
	def OnInit(self,locale):
		frame = MyFrame(locale, NULL, -1, _TITLE)
		frame.Show(true)
		self.SetTopWindow(frame)
		
		return true
	
def main(locale):
	MainWindow = MyApp(0, locale)
	MainWindow.MainLoop()

Wir hier jemand daraus schlau? Ich bin eigentlich fast sicher, dass ich mal wieder was falsch verstanden habe.

Gruss,

Christian
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

madRAM hat geschrieben:Das Subject sagt es schon ganz genau.

Ich habe eine Applikation, die ein Fenster aufbaut. Dafuer wird aus Main heraus implizit die OnInit Funktion von wxApp aufgerufen.
Ich habe meine Applikation aber so designed...

Das OnInit wird irgendwie von App selbst aufgerufen, und darf daher
nicht einfach so überschrieben werden.

irgendwie müsstes du es so machen:

Code: Alles auswählen

import wx

class MyApp(wx.App):
    def __init__(self, redirect, local): 
        self.local = local
        wx.App.__init__(self, redirect)

    def OnInit(self):
        frame = MyFrame(None, -1, _TITLE, self.local)
        frame.Show()
        print self.local
        return True


app = MyApp(0, local)
app.MainLoop()
madRAM
User
Beiträge: 14
Registriert: Sonntag 5. März 2006, 11:28

super, hat funktioniert - D A N K E !
Antworten