|
|
Einstellungen in neuem figure. |
|
ppirokke |
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 20.12.2010, 19:33
Titel: Einstellungen in neuem figure.
|
|
Hallo,
wie realisiert Ihr ein Programm, das aus mehreren Fenstern besteht (z.B. um Einstellungen zu bearbeiten usw.)? Ich würde gerne der Einfachheit halber "einen" global workspace haben in dem die Einstellungsvariablen liegen und von der zusätzlichen figure bearbeitet werden können. Ich kenne z.B. getappdata und setappdata, allerdings ist das finde ich bei einem vollen Worspace recht umständlich.
Gibt es da eine elegantere Methode?
Gruß und frohe Weihnachten!
|
|
|
|
|
eupho |
Forum-Meister
|
|
Beiträge: 777
|
|
|
|
Anmeldedatum: 07.01.09
|
|
|
|
Wohnort: Marburg
|
|
|
|
Version: R2009b
|
|
|
|
|
|
Verfasst am: 20.12.2010, 20:56
Titel:
|
|
Die Handles-Variablen kannst du vektorisieren und dann gleichzeitig ansprechen.
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 21.12.2010, 01:13
Titel:
|
|
|
|
|
Hi,
ja das ist mal ne Frage. Ich denke es kommt immer auf den jeweiligen Anwendungsfall an. Ich meine was sollen die GUIs alle machen? Wenn beispielsweise eine "ChildGUI" lediglich die "MainGUI" in Farben oder Texteigenschaften verändern soll dann kann man dieser "ChildGUI" ja einfach die handles der "MainGUI" beim Aufruf übergeben und diese entsprechend bearbeiten.
Ich selber benutze ziemlich oft setappdata und getappdata. Wobei ich damit eigentlich zum größten Teil selbstgeschriebene Handleklassen Vektorisiert speichere die ich ggf aufrufen kann und die passende Handleklasse mit findobj finden und ändern kann. Nur hab ich in diesen Handleklassen auch listener integriert, die die entsprechende GUI so automatisch setzen...
Es ist ab und an auch ganz hilfreich beim "x-sen" (schließen einer GUI) diese einfach mit visible 'off' dem user unsichtbar zu machen anstatt diese zu löschen. Beim neuaufruf einfach wieder visible 'on' und alle Settings sind erhalten geblieben. So spart man zwischenspeichereien und bei größeren GUIs erscheinen diese auch wesentlich schneller, da sie nicht wieder neu erstellt werden müssen...
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 21.12.2010, 05:16
Titel:
|
|
|
|
|
Also ein Fall den in zum Beispiel letztens hatte ist, dass ein Datensatz an CAN-Nachrichten geladen wird und verarbeitet wird. Nun kann man beispielsweise benutzerdefinierte Einstellungen vornehmen um die Ausgabe anzupassen. Das sollte der Übersicht halber in einer extra GUI geschehen, wobei die standard Einstellungen in der Main-GUI verarbeitet werden sollten.
Dabei jetzt die ganzen CAN-Signale zu übergeben oder gar neu zu laden ist in dem Fall recht Umständlich dachte ich mir, daher die Suche nach einer anderen Lösung.
Meist dreht es sich also bei mir um einen Bedienungsfaktor, ich bin es einfach gewöhnt von Delphi alles in unterschiedliche Fenster zu packen und diese dann "visible" und "invisible" zu schalten, damit der Nutzer nicht gleich mit allen Einstellmöglichkeiten überflutet wird.
Die Idee, mit handles zuzugreifen kann ich ja leider nur dann anwenden, wenn ich in der Main GUI ein entsprechendes Objekt in Form eines Buttons, Labels etc. habe das ich in seiner Einstellung abändern möchte.
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 21.12.2010, 09:20
Titel:
|
|
Hi,
Zitat: |
Die Idee, mit handles zuzugreifen kann ich ja leider nur dann anwenden, wenn ich in der Main GUI ein entsprechendes Objekt in Form eines Buttons, Labels etc. habe das ich in seiner Einstellung abändern möchte.
|
Nee warum das denn? Im enteffekt ist es doch dem Programmierer überlassen was er in die Handlesstruktur mittels guidata abspeichert. Da müssen ja nicht nur die standard Sachen drin stehen, die z.B. GUIDE erstellt...
Es ist eben in Matlab so, dass jede Funktion ihren eigenen WS hat. Ich persönlich finde es auch ganz sinnig. Für einen globalen WS würde mir spontan nur der Matlab WS einfallen, Daten mittels setappdata(0,...)/getappdata(0,...) oder globale Variablen. Wobei ich globale Variablen schonmal ausschließen würde, da sie schwierig zu kontrollieren sind...
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 21.12.2010, 17:53
Titel:
|
|
Du meinst also ich kann den Workspace einer Funktion zugänglich machen über ein Handle? Ich dachte bisher immer mit Handles kann man nur auf Objekte zugreifen, wie z.B. figures, axes oder all die Sachen aus der GUI. Gibt es bezüglich der Thematik irgendwo Tutorials? Ganz so tief konnte ich bisher leider nicht in MATLAB eintauchen, da ich mir alles selbst beibringen muss und das etwas Zeit braucht, habe ja erst vor ca. 1 Jahr richtig damit angefangen zu arbeiten
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 21.12.2010, 18:16
Titel:
|
|
Hey,
also mit Handlestruktur meinte ich die vom GUIDE erstellte handles die du ja immer in deinen Callbacks der einzelnen Guielemente übergeben bekommst...
Beispiel:
So hat der Programmierer freie Hand dabei Variablen GUI - intern zu verwalten etc... Im enteffekt kann man dort alles reinschreiben...
Du kannst ja einfach mal in der Hilfe unter guidata nachschauen. Wobei guidata intern glaube ich auch nur mittels setappdata dem übergebenen handle das Struct handles speichert...
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 21.12.2010, 18:24
Titel:
|
|
Achso, das ist eine Möglichkeit, die ich bisher noch garnicht gesehen habe. Theoretisch könnte ich mir dann ja auch eine Structure erstellen, mit dem Namen "globalVars" und dort alles reinspeichern / an die Funktionen übergeben beim Aufruf wenn ich Zugriff benötige. Kann ich das dann auch irgendwie realisieren beim Aufruf der zweiten figure oder muss ich dann die Structure über setappdata und getappdata übergeben? Wäre dann ja keine große Sache, da ich keine einzelnen globalen Variablen habe sondern eine einzige Structure.
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 21.12.2010, 21:29
Titel:
|
|
Das kannst du machen wie du willst. Sicherlich kannst du aus einer GUI eine Childgui aufrufen und einfach die handles oder was du halt möchtest übergeben...
Beispiel:
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 21.12.2010, 21:41
Titel:
|
|
Danke für den ausführlichen Quellcode, ich werde im nächsten Programm versuchen das derart umzusetzen und mich weiter etwas mit dem Thema zu beschäftigen.
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 22.12.2010, 09:47
Titel:
|
|
Ich habe noch zwei Fragen zu der Vorgehensweise.
1.) Stimmt es, dass hObject sich bei CallBacks immer auf das aufrufende Object beziehen?
2.) Du aktualisierst das handle der MainGui von der ChildGui aus mit:
.
Wenn man aber nur handles.Data in MainGui handles schreibt, dann gehen dort sämtliche Informationen über Buttons ect. verlohren oder nicht? Ich habe es jetzt so gelöst, dass ich in der ChildHandle einen MainGui Unterpunkt erzeuge, wo alle Sachen des MainGui's gespiegelt werden:
Meinst du das Vorgehen ist okay soweit oder könnte ich das ganze vereinfachen / unvorhergesehene Probleme vermeiden?
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 22.12.2010, 10:29
Titel:
|
|
|
|
|
Hi,
zu 1: Ja so ist es. Im pushbuttoncb ists das pushbuttonhandle, in der openingfcn der Gui entsprechend das figurehandle...
Zitat: |
2.) Du aktualisierst das handle der MainGui von der ChildGui aus mit:
|
Ja
Zitat: |
2.) Wenn man aber nur handles.Data in MainGui handles schreibt, dann gehen dort sämtliche Informationen über Buttons ect. verlohren oder nicht?
|
Nein da handles.Data = handles der MainGui ist (hab ichs ja in der openingfcn übergeben). Erstelle doch mal einfach eine GUI und debugge diese in den cb's so kannst du schauen was mit deiner handles struktur (was ja nur ein Struct ist) passiert.
Du brauchst guidata auch eigentlich nur benutzen, wenn du dein handles Struct änderst. Soll heißen wenn du daten hinzufügst oder löscht. Änderst du irgendetwas an deinen grafischen Objekten (Listbox, etc) dann musst du dies nicht mit guidata abspeichern. Dazu kannst du dir mal im oop - Bereich den Unterschied zwischen handle- und valueklassen anschauen.
Probleme können immer auftauchen. Das liegt ja in den Händen des Programmierers . Aber wenn man dies einmal verstanden hat, dann kommt man auch schnell auf Lösungen...
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 22.12.2010, 15:29
Titel:
|
|
Seltsam,
ich habe das Problem gehabt, dass bei mir MATLAB das handle der afrufenden GUI komplett überschrieben hatte nach Rückkehr aus der ChildGUI und ich somit kein handle mehr zur Verfügung hatte, bis auf die erstellte Variable der Child GUI. Nach debuggen hab ich festgestellt, dass folgender Befehl dafür zuständig sein müsste:
Ich habe es mir dann so erklärt, dass guidata die Variablen aus handles.Data nimmt und in handles.Data.MainGui aktualisiert, also den rest entfernt.
Wo liegt da mein Denkfehler?
|
|
|
Marco H. |
Forum-Guru
|
|
Beiträge: 404
|
|
|
|
Anmeldedatum: 12.11.10
|
|
|
|
Wohnort: Dortmund
|
|
|
|
Version: 2010a/2012b
|
|
|
|
|
|
Verfasst am: 22.12.2010, 17:47
Titel:
|
|
Hi,
du musst natürlich höllisch aufpassen was du wo speicherst. Anbei ein Beispiel wie ich eine Gui öfter öffnen kann (singleton == 0 stellen) und die hadnles entsprechend bearbeite...
Hast du permanent 2 drei oder mehr figures offen die miteinander kommunizieren sollen ist meiner Ansicht nach die übersichtlichste Möglichkeit setappdata getappdata zu nutzen. Ich wollte mit dem Beispiel nur zeigen, dass man in einfachen Fällen auch diese Methode anwenden kann...
MfG Marco
|
|
|
ppirokke |
Themenstarter
Forum-Fortgeschrittener
|
|
Beiträge: 64
|
|
|
|
Anmeldedatum: 19.11.10
|
|
|
|
Wohnort: ---
|
|
|
|
Version: R2010a
|
|
|
|
|
|
Verfasst am: 22.12.2010, 18:17
Titel:
|
|
Okay, dann denke ich, dass ich soweit verstanden habe, was du meinst. In der Art ohne Abfrage, falls keine Übergabe stattfindet habe ich mein Testprogramm derzeit auch realisiert. Ich denke damit habe ich alle Möglichkeiten von MATLAB-Gui ausgeschöpft
Danke für die Hilfe!
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
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.
|
|