Die Hauptgui besteht aus einem Popupmenü mit 3 Einträgen (Auswahl 1, Auswahl 2, Auswahl 3) und einem Button, der die Untergui aufruft. Über den Befehl:
schreibe ich die Einträge des Popupmenüs in die Untergui. Dort befindet sich lediglich ein Popupmenü, welches die Werte ebenfalls beinhalten soll.
Soweit klappt das ganze auch.
Jetzt möchte ich aber, dass, wenn ich in der Untergui im Popupmenü die Auswahl ändere (meinetwegen statt Auswahl 1, Auswahl 3 anklicke), diese Auswahl dann auch in der Hauptgui (NACH DEM SCHLIEßEN DER UNTERGUI) ausgewählt ist. Möchte ich dann die Auswahl in der Hauptgui doch noch einmal ändern, so soll diese Auswahl auch in der Untergui nach dem Klicken des Buttons ausgewählt sein.
Es soll sich quasi mit dem Ändern der Auswahl in einem der beiden Popupmenüs zeitgleich auch die Auswahl in dem jeweils anderen ändern. Allerdings weiß ich leider überhaupt nicht, wie ich dies hinbekommen soll, denn ich möchte nicht, dass beim Schließen der Untergui bspw. die Hauptgui 'neu' ausgeführt wird, sprich einfach 'nochmal das Bauen' der figure, des Popupmenüs und des Buttons durchlaufen wird. Es soll eher so sein, dass die Hauptgui quasi auf die Untergui 'wartet', bis diese geschlossen wird und dann der Wert der Untergui in der Hauptgui angezeigt wird (OHNE, DASS DIE HAUPTGUI NEU GEBAUT WERDEN MUSS!!!).
Hat da jemand eine Idee, wie ich das ganze Lösen kann? Was die Übergabe von Werte zwischen GUIS angeht, habe ich leider sehr wenig Ahnung.
Anbei habe ich die beiden Dateien (Hauptfenster und Unterfenster) gehangen.
Hat denn niemand eine Idee? Ich bin hier wirklich am verzweifeln und komme einfach nicht weiter. Auch google konnte mir bisher nicht helfen. Ich hoffe es gibt diese Möglichkeit überhaupt und irgendwer von euch hat einen Lösungsvorschlag für mich. Wäre echt super.
Der Umweg, die Daten im Root-Objekt zu speichern, ist unnötig und birgt die gleichen Probleme wie globale Variablen. Speichere die Daten besser im Haupt-GUI.
Nun kannst Du aus dem Unter-GUI alles im "Handles"-Struct des Hauptfensters verändern, was Du möchtest. Du kannst so auf "ferngesteuert" einen ausgewählten String des Popups setzen und ihn wieder auslesen. So teilen sich beide GUIs den Struct mit Handles und Benutzer-Daten.
Und da die Daten nicht im Root-Objekt gespeichert werden, kann man sogar mehrere Fenster gleichzeitig öffnen ohne dass es Probleme gibt.
Hallo Jan,
danke für deine sehr hilfreiche Antwort. Jetzt klappt es genau so, wie ich es mir vorstelle! Vielen, vielen Dank.
Allerdings hätte ich noch eine etwas allgemeinere Frage, um weiter in Matlab und der GUI-Programmierung zu lernen. Und zwar hast du geschrieben:
Zitat:
Der Umweg, die Daten im Root-Objekt zu speichern, ist unnötig und birgt die gleichen Probleme wie globale Variablen.
Welche Probleme meinst du genau? Was für Probleme können mit globalen Variablen konkret entstehen?
Hallo Jan,
ich habe das ganze Beispiel jetzt noch einmal versucht nachzuvollziehen. Es läuft auch soweit, es gibt keine Fehlermeldungen, allerdings wird der von mir gewünschte Effekt noch nicht erzielt. Ich möchte gerne im Hauptfenster im Popupmenu Auswahl 2 auswählen. Dann soll Auswahl 2 im Unterfenster im Popupmenü dort auch ausgewählt sein. Dies funktioniert leider nicht. Umgekehrt genauso. Funktioniert leider auch nicht. Ich verstehe nur irgendwie nicht wieso. Ich setzte ja z.B. am Ende der function Unterfenster(Hauptfenster) die aktualisierte Handles-Struktur zu den appdata:
Allerdings woher weiß denn jetzt das Hauptfenster, dass ich im Popupmenü des Unterfensters die Auswahl geändert habe und ändert diese Auswahl in 'Echtzeit' auch im Hauptfenster, so dass diese dann dort auch im Popupmenü nach schließen des Unterfensters erscheint? Weil selbst wenn ich getappdata zu Beginn der function Hauptfenster setzten würde, würde diese ja niemals ausgeführt werden, da die function Hauptfenster ja nicht erneut durchlaufen wird.
Also du siehst, irgendwo ist bei mir gerade eine Blockade drin. Wäre super, wenn du mir weiterhelfen könntest!
Grüße Max
Anbei habe ich noch schnell die jeweiligen Matlabcodes der aktuellen Version gehangen, sowohl als Datei, wie auch hier im Thread:
function Hauptfenster:
Habe gerade eben noch eine kleine Änderung vorgenommen, allerdings ohne Wirkung. Verstehe nur leider nicht wieso. Und zwar habe ich die function Unterfenster ein wenig erweitert:
wurde von mir erweitert. Damit wollte ich erzielen, dass beim Ändern der Auswahl im popupmen2 auch automatisch im popupmenu1 in der function Hauptfenster der Wert gesetzt wird. Allerdings mit mäßigem Erfolg, ich erhalte immer folgende Fehlermeldung:
Code:
>> Hauptfenster
Error using Unterfenster>popupmenu2_callback
Too many input arguments.
Hallo zusammen,
ich habe es jetzt mit viel Rumprobiererei hinbekommen. Allerdings weiß ich nicht, ob das ganze eine 'saubere' Lösung darstellt:
Hier mal der Programmcode für die function Unterfenster:
in der function popupmenu2_callback(object_handle,~, Hauptfenster) weglassen und die Übergabe funktioniert trotzdem?
Als zweites habe ich eine Frage zu den Popupmenüs. Und zwar habe ich mir einen weiteren Button Test in die function Hauptfenster gebastelt, über den ich mir sowohl die handles-Struktur zum Workspace ausgeben lassen kann als auch den Wert des popupmenu2 aus der function Unterfenster, um sie mir genauer anzuschauen. Mache ich das, ergibt sich folgendes Bild:
Es sind also sowohl das Popupmenü 1 als auch das Popupmenü 2 gespeichert.
Hier die einzelnen Popupmenüs:
Popupmenu1
Popupemnu2
Was ich nicht verstehe ist, warum der Wert des 2. Popupmenüs nicht ausgegeben werden kann. Es müsste doch eigentlich funktionieren, auch wenn es nicht mehr exisitert, weil es nach dem Schließen 'gelöscht' wurde. Aber ich hab es doch vorher extra via setappdata gespeichert. Und anzeigen, dass es in der handels-struct liegt, tut Matlab ja schließlich auch. Also warum kann ich dann nicht mehr auf den Wert zurück greifen? Und warum werden mir Popupmenu 1 und Popupmenu 2 in der handlesstruct so 'komisch' angezeigt? ich kann dort beispielsweise für beide Popupmenüs nicht den eintrag 'Value' finden?! Dies ist anders, wenn ich mir die Struktur noch vor dem ersten Öffnen und erstellen des 2. Popupmenüs angucke!
Kann mir jemand diese Frage vllt. beantworten? Vorausgesetzt, er versteht, was ich meine/was meine Fragen sind und weiß eine Antwort
in der function popupmenu2_callback(object_handle,~, Hauptfenster) weglassen und die Übergabe funktioniert trotzdem?
Was ist "die Übergabe"?
Zitat:
Es sind also sowohl das Popupmenü 1 als auch das Popupmenü 2 gespeichert.
Nein, es werden nicht die Menüs gespeichert, sondern nur die handles zu ihnen. Wenn die Menüs selbst gelöscht sind, ist der handle nur ein Zeiger auf ein gelöschtes Element. Dann kann natürlich keine Werte mehr abgefragt werden.
Zitat:
Aber ich hab es doch vorher extra via setappdata gespeichert.
Meine erste Frage hierzu wäre: Wieso kann ich das letzte
Code:
setappdata(Hauptfenster, 'Handles', handles)
Funktion ohne Link?
in der function popupmenu2_callback(object_handle,~, Hauptfenster) weglassen und die Übergabe funktioniert trotzdem?
Was ist "die Übergabe"?
Mit 'die Übergabe' ist das Weitergeben der geänderten handles, die man in der funct4ion Unterfenster geändert hat, an die function Hauptfenster gemeint, wo ja dann alle geänderten handles (bspw. der Wert des popupmenu2) verwendet werden.
Zitat:
Zitat:
Aber ich hab es doch vorher extra via setappdata gespeichert.
Was hast Du genau gespeichert?
Ich meinte damit alle Eigenschaften des Popupmenu2. Aber ich glaube ich habe da etwas verwechselt. Ich habe nicht die Eigenschaften des Popupmenus2 gespeichert (wie bspw. den ausgewählten Value oder String etc.), sondern nur den handle, also Zeiger, zu eben jenem Popupmenu. Ist das richtig?
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.