Seite 1 von 1

Schreibend auf eine Variable eines parents zugreifen

Verfasst: Sonntag 1. Juni 2008, 19:39
von Blauer Fasan
Habe einen Einstellungsdialog für meine Anwendung geschieben. Wenn dieser beendet wird, möchte ich die Einstellungen übernehmen und auf eine Variable des Hauptfensters, welches auch gleichzeitig der parent des Einstellungsdialogs ist schreibend zugreifen, sprich den Wert der Variable zum Beispiel von False auf True setzen, nur funktioniert das nicht. Ich kann die Variable des parents ganz einfach mit

Code: Alles auswählen

parent.variablenname
ansprechen, dann kann ich ihren Wert auch auslesen, nur verändern geht anscheinend nicht, wüsste vielleicht jemand warum das so sein könnte?

Vielen Dank im Voraus!

Verfasst: Samstag 7. Juni 2008, 10:46
von Hillkorn

Code: Alles auswählen

 self.variablenname = parent.variablenname 
sobald du dann self.variablenname einen wert gibst ist er im parent eigentlich auch drinn jedenfalls geht das bei mir so ;)

Verfasst: Samstag 7. Juni 2008, 11:53
von lunar
Ich persönlich würde ja beim Schließen des Einstellungsdialogs ein Signal aussenden, welches im übergeordneten Widget abgefangen wird. Dann kann das übergeordnete Widget selbst seine Attribute auf den neuesten Stand bringen.

Zum einen musst du dich dann nicht um Vater-Kind-Verhältnisse kümmern, zum anderen trennst du die Komponenten sauber.

Verfasst: Samstag 7. Juni 2008, 12:46
von Blauer Fasan
Und wie würde so etwas aussehen, also ich habe da jetzt noch keine Erfahrungen.

Prinzipiell ist die Idee sehr gut! Sauber ist immer gut :D

Verfasst: Samstag 7. Juni 2008, 12:57
von lunar
Das kommt auf das verwendete GUI-Toolkit an.

Verfasst: Samstag 7. Juni 2008, 13:03
von Leonidas
lunar hat geschrieben:Das kommt auf das verwendete GUI-Toolkit an.
Mal sehen in welchem Forum wir sind... wxPython würde ich mal schätzen :)

Verfasst: Samstag 7. Juni 2008, 13:10
von lunar
Leonidas hat geschrieben:
lunar hat geschrieben:Das kommt auf das verwendete GUI-Toolkit an.
Mal sehen in welchem Forum wir sind... wxPython würde ich mal schätzen :)
D'oh, das kommt davon, wenn man sich nur auf das Textfeld konzentriert ;)

Eigentlich können wir ja dann jetzt auf gerold warten, der dürfte bestimmt bald vorbei kommen ;)

Verfasst: Sonntag 8. Juni 2008, 17:43
von gerold
lunar hat geschrieben:Eigentlich können wir ja dann jetzt auf gerold warten, der dürfte bestimmt bald vorbei kommen ;)
Hallo lunar!

Eigentlich wollte ich dieses Thema auslassen. Denn ich weiß nicht weshalb das nicht funktionieren soll. Und von einer Fehlermeldung wird auch nichts geschrieben. Ich denke mal, dass der Fehler mit einem guten Debugger leicht zu finden sein wird. Wahrscheinlich wird die zu ändernde Variable überhaupt nicht angefasst. Wahrscheinlich wird eine NEUE Variable erzeugt. Und das sieht man, wenn man das Programm mit einem Debugger durchcheckt.

lg
Gerold
:-)

Verfasst: Sonntag 8. Juni 2008, 17:57
von lunar
Aber du könntest ihm ja erklären, wie man in wx Ereignisse, Signale oder wie auch immer das da heißt, auslöst, damit er überhaupt gar nicht erst verschiedene Widgets so hässlich mixen muss, sondern schon eventgesteuert programmieren kann ;)

Verfasst: Montag 9. Juni 2008, 21:36
von Blauer Fasan
Also eine Fehlermeldung habe ich nicht gepostet, da es keine gibt. Es ist wahrscheinlich wie du sagst Gerold, dass ich die Variable nicht anfassen tue, ich folge dann mal deinem Rat und checke das ganze mit einem Debugger.

Verfasst: Mittwoch 11. Juni 2008, 17:20
von Hillkorn
ich habe das gefühl das python nur dann die variablen des parents verändert wenn der variablenname des childs exakt der gleiche ist also self.a = parent.a würde gehen aber self.a = parent.b nicht

Verfasst: Mittwoch 11. Juni 2008, 19:37
von Blauer Fasan
Das Problem liegt nur darin, dass es lesend geht, nur schreibend nicht.

Verfasst: Mittwoch 11. Juni 2008, 20:26
von gerold
Blauer Fasan hat geschrieben:Das Problem liegt nur darin, dass es lesend geht, nur schreibend nicht.
Hallo Blauer Fasan!

Ich dachte ja nicht, dass du dieses Problem immer noch hast. Es bringt dich weiter, wenn du dein Problem in einem kleinen Beispiel-Code zusammenfasst, den du uns zeigen kannst.

Und vielleicht bringt dich dieser Beitrag auf eine Idee (versuche das Beispiel auszuprobieren und zu verstehen):
http://www.python-forum.de/post-78061.html#78061

mfg
Gerold
:-)

Verfasst: Donnerstag 12. Juni 2008, 07:30
von Blauer Fasan
Danke Gerold, das Problem "besteht" noch, da ich leider deinen ersten Rat noch nicht durchführen konnte, habe momentan sehr viel Stress in der Schule, ich werde beides sehr gute Tipps nach der stressigen Zeit ausprobieren, also erstmal danke für deine und für Hilfe der anderen auch!