Verfasst am: 29.09.2015, 17:23
Titel: Gui nach dem Schließen wieder mit altem Stand aufrufen
Hallo zusammen,
ich habe mal wieder eine Frage zu den GUIs. Und zwar möchte ich ganz allgemein über einen Button, welcher sich auf der Hauptgui befindet, eine Untergui öffnen. Dort möchte ich dann über ein edit-Feld eine Stringeingabe machen. Dieser String wird dann in das Textfeld geschrieben. Wenn ich jetzt die Untergui schließe, dann möchte ich, dass diese mit samt ihrer Eingaben gespeichert wird, so dass ich beim erneuten Aufruf der Untergui über den Button der Hauptgui wieder die Eingaben, die ich zuvor getätigt habe, eingetragen sind.
Ganz konkret habe ich dies in folgendem Beispiel geschrieben:
HauptFigure:
Code:
%% Auslesen der Bildschirmgröße
scrsz = get(0,'ScreenSize');
Das Problem an der Sache ist, dass ich es nicht hinbekomme die Untergui beim sschließen zu speichern. Es kommt immer folgende Warnung:
Zitat:
Warning: Figure is saved in UnterFigure.fig. Saving graphics handle variables can cause the creation of very large
files. To save graphics figures, use savefig.
> In matlab.graphics.internal.figfile.FigFile/write (line 32)
In savefig (line 91)
In schliessen_Fcn (line 3)
Es wird zwar dann die figure gespeichert. Doch wenn ich diese manuell aufrufe, dann wird nicht nur die Untergui, sondern auch die Hauptgui geöffnet. Implementiere ich jetzt noch in den OK-Button die Abfrage, ob bereits eine UnterFigure.fig-Datei existiert, und wird dann die existierende UnterFigure.fig geöffnet, passiert das gleiche, wie bei der manuellen Öffnung der Datei. Es wird zusätzlich zu der schon existierenden HauptGui eine weitere HauptGui geöffnet plus die UnterGui.
Wie kann ich dieses Problem beheben? Gibt es vllt. alternative, elegantere Umsetzungen der Problematik, dass Daten, die in einer figure eingegeben wurden, gespeichert werden, so dass sie nach dem Schließen der figure wieder zur Verfügung stehen?
Besten Dank für eure Mühnen und liebe Grüße
Max
Anbei habe ich noch alle files gehangen, die das Problem beschreiben!
zunächst eine Frage zum gewünschten Verhalten:
Ich verstehe es so, dass die Unter-GUI ihren letzten Zustand annehmen soll, wenn sie geschlossen und erneut von der (noch geöffneten) Haupt-GUI aufgerufen wird.
Was soll nun passieren, wenn die Haupt-GUI geschlossen wird, (später) erneut gestartet wird, und dann die Unter-GUI erneut geöffnet wird? Soll die Unter-GUI auch dann die letzten Einstellungen darstellen oder eine Art Urzustand?
Hallo Harald,
wenn die Haupt-GUI geschlossen wird, (später) erneut gestartet wird, und dann die Unter-GUI erneut geöffnet wird, dann soll die Unter-GUI eine Art Urzustand einnehmen. Sie soll dann im leeren Zustand geöffnet werden. Und dann geht es von vorne los. Sprich gibt der Benutzer etwas ein in der Untergui, dann soll dies solange gespeichert werden, bis die Hauptgui mal geschlossen wird.
Hast du einen Lösungsvorschlag? Ich bin leider immer noch nicht weiter gekommen.
ich würde beim Schließen der Unter-GUI alle Informationen, die erhalten bleiben sollen, mit setappdata in der Haupt-GUI ablegen. Beim Aufrufen der Unter-GUI überprüfen, ob solche Informationen vorhanden sind, und sie ggf. mit getappdata holen, andernfalls Urzustand.
Hallo Harald,
danke für deine schnelle Antwort.
Wie genau kann ich das in dem konkreten Beispiel implementieren? Ich verstehe es ehrlich gesagt noch nicht ganz. Ich weiß nicht genau, was ich konkret via setappdata abspeichern muss. Kannst du es mir genauer (evtl. sogar an dem Beispiel von oben selber) erklären?
Ich weiß nicht genau, was ich konkret via setappdata abspeichern muss.
Alle Eingaben, die vom Nutzer angepasst wurden. Das wird meist die Eigenschaft 'String' sein, kann aber auch eine andere sein, z.B. 'Value' bei einem Slider.
Hallo Harald,
vielen Dank für deine schnelle Antwort. Top, genau so soll das ganze funktionieren. Aber mal eine blöde Frage, warum hat denn meine Version davon nicht funktioniert? Bzw. warum kann man es so nicht lösen?
ich habe ein etwas erweitertes Problem, was ich mit den bisherigen Erkenntnissen leider noch nicht ganz gelöst bekomme. Und zwar habe ich mich nun doch entschieden, dass ich die Frage aus dem Thread, den ich bereits top von dir erklärt bekommen habe: http://www.gomatlab.de/editfeld-in-.....x-verknuepfen-t38821.html mit dem Problem aus diesem Thread kombiniere.
Und zwar möchte ich folgendes erreichen:
Ich möchte die Untergui variabler gestalten. Und zwar möchte ich, dass sich vor dem Öffnen/Erstellen der Untergui eine Funktion öffnet, welche die benötigten Textboxstrings enthält. In meinem Beispiel habe ich einfach die folgende Funktion geschrieben:
Jetzt muss die Funktion bei jedem Anklicken des Ok-Buttons, also vor dem Erstellen der Untergui ausgeführt werden. Daraus werden die Anzahl der benötigten Textboxen und somit auch Edit-Boxen ausgelesen. Des Weiteren werden die Strings für die Textboxen der ersten Spalte aus den Feldnamen ausgelesen.
Dann soll der Benutzer die Möglichkeit haben, für jeden Textboxstring (beispielsweise für den Durchmesser) einen Wert in der Edit-Box einzugeben, welcher in der zugehörigen Textbox in der letzten Spalte angezeigt wird. Wie ich auf die richtige Textbox zugreife weiß ich ja jetzt dank deiner Hilfe schon (an dieser Stelle nochmal dickes Dankeschön!).
Soweit klappt es auch super! Nur leider nicht weiter. Ich stehe wieder vor dem Problem, dass ich ganz gerne die eingegebenen Werte des Benutzers speichern würde, so dass sie beim erneuten Aufruf der Untergui (wieder vorausgesetzt, dass die Hauptgui nicht geschlossen wurde), in den jeweiligen Textboxen eingetragen sind. Nur wenn sich die Einlese-Funktion (function [out] = benoetigte_textboxen() ) ändert, sprich weitere Werte hinzukommen oder eine komplett andere Funktion mit anderen Werten eingeladen wird, sollen keine Werte mehr übernommen werden.
Gibt es dafür eine Lösung? Bzw. hast du eine Lösung parat. Ich habe leider bisher keine vernünftige Lösung gefunden, die mein Problem behebt. Anbei füge ich dir noch schnell die bisherigen anderen Files an, die ich dazu erstellt habe.
Liebe Grüße und abermals besten Dank für deine wirklich immer kompetente Hilfe
Max
ich würde ähnlich vorgehen wie beim letzten Versuch des Speicherns von Daten. Statt data.textfeld (oder wie ich das da genannt habe) würde ich allerdings
data.wertfeld.(parameter{i})
verwenden, äquivalent für editfeld.
Wenn die Daten eingelesen werden, kann man mit isfield testen, ob es z.B. in data.wertfeld ein Feld parameter{i} gibt. Falls ja, werden die Werte übernommen, andernfalls werden sie auf Defaultwerte gesetzt.
Ein Problem sehe ich darin, dass du ja sagtest, dass die Parameter der Unter-GUI nur solange gespeichert werden sollen, wie die Haupt-GUI geöffnet bleibt. Wie wahrscheinlich ist es aber, dass sich diese Einlese-Funktion ändert, während die Haupt-GUI geöffnet ist? Diesen Workflow fände ich etwas ungewöhnlich.
Ein Problem sehe ich darin, dass du ja sagtest, dass die Parameter der Unter-GUI nur solange gespeichert werden sollen, wie die Haupt-GUI geöffnet bleibt. Wie wahrscheinlich ist es aber, dass sich diese Einlese-Funktion ändert, während die Haupt-GUI geöffnet ist? Diesen Workflow fände ich etwas ungewöhnlich.
Also die Wahrscheinlichkeit kann ich noch nicht abschätzen. Ich plane ein Popupmenü zu implementieren, in dem sich der Nutzer aussuchen kann, welche Einlese-Funktion er zum benutzen möchte. Einmal sollen Geometriedaten (siehe Beispielfunktion: Länge, Durchmesser, etc.) und einmal sollen Simulationsdaten (z.B. Geschwindigkeit, Strecke, etc.) eingelesen werden.
Bekomme es allerdings noch nicht wirklich hin die von dir beschriebene Lösung zu implementieren. Kannst du mir vielleicht nochmal eine neue Version der Files schicken, in der du es implementiert hast und ich es so besser nachvollziehen kann? Wäre super nett, wenn das ginge.
Hallo Harald,
ich habe mich in der Zwischenzeit dran geklemmt und habe es soweit hinbekommen. Allerdings zweifele ich sehr an, dass du es so gemeint hast. Finde die Lösung irgendwie noch sehr 'unelegant', so wie ich sie mir hingebogen habe. Hast du Verbesserungsvorschläge?
okay, wenn du kein weiteres Verbesserungspotential siehst, dann habe ich mir das sicherlich nur eingebildet. Ich bin soweit auch eigentlich, was die Funktionalität angeht, zufrieden mit der Lösung!
Besten Dank und Grüße
Max
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.