return "beliebige Zahl" klappt nicht.

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Montag 23. Januar 2006, 13:35

Hallo!
Also mir kommt die Frage ziemlich banal vor, aber irgendwie klappts einfach nicht bei mir :oops:

Ich möchte an einer beliegen Stelle in meinem Programm einen int-Wert zurückgeben, aber es klappt einfach nicht.

Das ist der Teil in dem ich in meinem Hauptprogramm mein Frame aufrufe:

Code: Alles auswählen

frame = MySettingMenu(self, -1, "Einstellungen",style=wx.DEFAULT_FRAME_STYLE | wx.TINY_CAPTION_HORIZ)
frame.Show(True)
also ich möchte z.B in MySettingMenu die Zeile

Code: Alles auswählen

return 2
einfügen, so dass ich den Wert in meinem Hauptprogramm erhalte. Das klappt irgendwie nicht.

Kann mir vielleicht jemand sagen, was ich falsch mach?
Danke, Kathrin!

(sorry für die evtl verwirrende Erklärung für so ein wahrscheinlich simples Problem)
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 23. Januar 2006, 13:42

Falls Du probierst in __init__ den Wert 2 zurückzugeben, das geht nicht. __init__'s Rückgabewert wird von der Metaklasse type weggeschmissen.

Wenn Du einen Wert aus einer Klasse brauchst, dann ruf doch einfach eine Funktion auf der Klasse auf, die Dir den Wert zurückgibt?

Sonst, ja, das Problem ist sehr konfus. Bitte gib noch ein paar mehr Informationen bevor wir darauf vernünftig antworten können.

--- Heiko.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Montag 23. Januar 2006, 14:12

OK, sorry,ist immer schwer (gerade bei "GUI-Klassen" find ich) das richtige Maß zwischen zu viel oder zu wenig Informationen zu finden.
Also ich rufe in meinem Hauptprogramm die Klasse meines Einstellungsmenü (MySettingMenu) auf. Wenn ich meine Einstellungen gespeichert hab, will ich diese Information ans Hauptprogramm weiterleiten, also durch die Rückgabe eines Wertes zum Beispiel.

Der Teil, in dem die Einstellungen gespeichert werden soll so aussehen:

Code: Alles auswählen

def saveSettings(self,event):
     ... Einstellungen werden gespeichert ...
     ... hier soll an Hauptprogramm ein Wert zurückgegeben werden ... z.B.
     return 2
Diese Funktion befindet sich in der Klasse MySettingMenu und soll einen int-Wert ans Hauptprogramm zurückgeben ... und das klappt irgendwie nicht :(

Ich hoffe, das war soweit verständlich!

Aber danke modelnine, dass ich in __init__ nichts zurückgeben kann, hab ich auch noch nicht gewusst.
modelnine
User
Beiträge: 670
Registriert: Sonntag 15. Januar 2006, 18:42
Wohnort: Celle
Kontaktdaten:

Montag 23. Januar 2006, 14:28

Ich denke Du willst sowas:

Code: Alles auswählen

class MeinDialog:
    def __init__(self,<blah>):
        <dialog initialisieren>

    # DoModal() ist eine Funktion von wx.Dialog, wenn mich nicht alles täuscht...
    # Du definierst ja oben callbacks wenn sich was ändert im Dialog, diese callbacks
    # müssen irgendwo die Daten zwischenspeichern.

    def getData(self):
        return <meine daten>

class HauptFrame:
    def doSettings(self):
        dialog = MeinDialog(<blah>)
        dialog.DoModal() # Du willst doch das ganze als modalen Dialog, oder nicht?
        print "Meine Daten": dialog.getData()
Sowas in die Richtung denke ich ist das was Du willst. Das da oben ist absoluter Pseudocode, sollte Dich aber in die richtige Richtung schubsen. Ich hab das letzte mal vor ca. einem Jahr in wxwidgets programmiert, weiß es also selbst nicht mehr so ganz genau.

Sonst: guck mal auf der wxPython Homepage, da ist mit sicherheit irgendwo ein DoModal() Beispiel.

--- Heiko.
Kathrin
User
Beiträge: 43
Registriert: Dienstag 6. Dezember 2005, 15:11

Montag 23. Januar 2006, 15:14

Danke, das hilft mir schon mal ein bisschen weiter, auch wenns nicht ganz das ist, was ich brauch. Aber ich glaub, ich weiß jetzt, was das Problem an der ganzen Sache ist:
Du rufst ja in deinem Hauptprogramm die Funktion getData() auf und dann bekommst du natürlich auch hier den Rückgabewert. Ich muss die Funktion allerdings in meiner Klasse MySettingMenu aufrufen und alle Rückgabewerte laufen dann natürlich auch in MySettingMenu auf. (das solls aber nicht, sondern der Wert soll ans HauptFrame übergeben werden)
... also mir fehlt grad irgendwie eine Idee, wie ich in einer Funktion in der Klasse MySettingMenu Informationen (z.B. Variablen) an das Hauptprogramm/HauptFrame übergeben oder allgemein, das HauptFrame steuern kann. :(
Antworten