WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Gui nach dem Schließen wieder mit altem Stand aufrufen

 

MatlabErlerner
Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 17:23     Titel: Gui nach dem Schließen wieder mit altem Stand aufrufen
  Antworten mit Zitat      
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');

%% Anlegen des Hauptfensters
HauptFigure = figure('Position',[0.3*scrsz(3),0.3*scrsz(4),0.6*scrsz(3),0.6*scrsz(4)],...
                    'Units','normalized',...
                    'Resize','on',...
                    'MenuBar','none',...
                    'Name', 'Hauptfigure',...
                    'NumberTitle','off');
               
%% Anlegen des OK-Buttons                        
objects.OKbutton = uicontrol('parent', HauptFigure, ...
                     'style', 'pushbutton', ...
                     'FontName', 'Arial', ...
                     'FontSize', 10, ...
                     'string', 'OK', ...
                     'Units','normalized', ...
                     'Position', [.89,.01,.1,.07], ...
                     'Callback', {@OK_Fcn, HauptFigure});
                 
%% Speichern der Objektdaten
setappdata(HauptFigure, 'objects', objects);  


UnterFigure:
Code:
function OK_Fcn(~, ~, HauptFigure)

%% Einladen der handles- uind objects-struct
objects = getappdata(HauptFigure, 'objects');

%% Auslesen der Bildschirmgröße
scrsz = get(0,'ScreenSize');

%% Anlegen des Hauptfensters
UnterFigure = figure('Position',[0.3*scrsz(3),0.3*scrsz(4),0.6*scrsz(3),0.6*scrsz(4)],...
                    'Units','normalized',...
                    'Resize','on',...
                    'MenuBar','none',...
                    'Name', 'Unterfigure',...
                    'NumberTitle','off', ...
                    'CloseRequestFcn', {@schliessen_Fcn});
               
 % Anlegen der edit-Box  
objects.edit_feld = uicontrol('parent', UnterFigure, ...
                                             'style', 'edit', ...
                                             'FontName', 'Arial', ...
                                             'FontSize', 10, ...
                                             'string', '-', ...
                                             'HorizontalAlignment', 'left', ...
                                             'Units','normalized', ...
                                             'Position',[0.1 0.8 0.2 0.1], ...
                                             'Callback', {@edit_eingabe_Fcn, HauptFigure});
                                         
 % Anlegen der text-Box  
objects.text_feld = uicontrol('parent', UnterFigure, ...
                                             'style', 'text', ...
                                             'FontName', 'Arial', ...
                                             'FontSize', 10, ...
                                             'string', '', ...
                                             'HorizontalAlignment', 'left', ...
                                             'Units','normalized', ...
                                             'Position',[0.4 0.8 0.2 0.1], ...
                                             'BackgroundColor', 'green');  
                                         
%% Speichern der Objektdaten
setappdata(HauptFigure, 'objects', objects);  


Auslesen des Edit-Feldes:
Code:
function edit_eingabe_Fcn(hObject, ~, HauptFigure)

%% Einladen der handles- uind objects-struct
objects = getappdata(HauptFigure, 'objects');

% String auslesen
string = get(hObject, 'String');

% String in Textfeld setzen
set(objects.text_feld, 'String', string);


%% Speichern der Objektdaten
setappdata(HauptFigure, 'objects', objects);


Schließen der UnterFigure:
Code:
function schliessen_Fcn(hObject, ~)

savefig(hObject, 'UnterFigure');


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!

schliessen_Fcn.m
 Beschreibung:
Schließen der Untergui

Download
 Dateiname:  schliessen_Fcn.m
 Dateigröße:  71 Bytes
 Heruntergeladen:  424 mal
edit_eingabe_Fcn.m
 Beschreibung:
Auslesen des Edit-Feldes

Download
 Dateiname:  edit_eingabe_Fcn.m
 Dateigröße:  355 Bytes
 Heruntergeladen:  389 mal
OK_Fcn.m
 Beschreibung:
Untergui

Download
 Dateiname:  OK_Fcn.m
 Dateigröße:  2.11 KB
 Heruntergeladen:  373 mal
MainFigure.m
 Beschreibung:
Hauptgui

Download
 Dateiname:  MainFigure.m
 Dateigröße:  985 Bytes
 Heruntergeladen:  385 mal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.09.2015, 07:16     Titel:
  Antworten mit Zitat      
Hallo,

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?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.09.2015, 22:20     Titel:
  Antworten mit Zitat      
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.

Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 30.09.2015, 22:36     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2015, 12:48     Titel:
  Antworten mit Zitat      
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?

Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.10.2015, 13:46     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
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.

Siehe Anhang.

Grüße,
Harald

schliessen_Fcn.m
 Beschreibung:

Download
 Dateiname:  schliessen_Fcn.m
 Dateigröße:  273 Bytes
 Heruntergeladen:  417 mal
OK_Fcn.m
 Beschreibung:

Download
 Dateiname:  OK_Fcn.m
 Dateigröße:  2.41 KB
 Heruntergeladen:  403 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.10.2015, 14:01     Titel:
  Antworten mit Zitat      
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?

Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.10.2015, 23:18     Titel:
  Antworten mit Zitat      
Hallo Harald,

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:
Code:
function [out] = benoetigte_textboxen()

out.parameter.radius = [];
out.parameter.durchmesser = [];
out.parameter.laenge = [];
out.parameter.breite = [];

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

Gui_nach_dem_Schließen_wieder_mit_altem_Stand_aufrufen.zip
 Beschreibung:
Zip-Datei mit allen bisher erstellten Files!

Download
 Dateiname:  Gui_nach_dem_Schließen_wieder_mit_altem_Stand_aufrufen.zip
 Dateigröße:  2.01 KB
 Heruntergeladen:  341 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.10.2015, 11:16     Titel:
  Antworten mit Zitat      
Falls jemand anderes ebenfalls eine Idee zur Lösung hat, bin ich sehr dankbar Smile

Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.10.2015, 14:18     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.10.2015, 17:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort!

Zitat:
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.

Liebe Grüße
Max
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.10.2015, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Bekomme es allerdings noch nicht wirklich hin die von dir beschriebene Lösung zu implementieren.

Was hast du versucht, und wo genau liegen die Probleme dabei?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.10.2015, 22:09     Titel:
  Antworten mit Zitat      
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?

Grüße
Max

NEU_Gui_nach_dem_Schließen_wieder_mit_altem_Stand_aufrufen.zip
 Beschreibung:

Download
 Dateiname:  NEU_Gui_nach_dem_Schließen_wieder_mit_altem_Stand_aufrufen.zip
 Dateigröße:  4.36 KB
 Heruntergeladen:  365 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 04.10.2015, 09:00     Titel:
  Antworten mit Zitat      
Hallo,

sieht auf den ersten Blick gut aus. Wo siehst du denn Verbesserungsbedarf?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
MatlabErlerner
Themenstarter

Forum-Century

Forum-Century


Beiträge: 104
Anmeldedatum: 26.06.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 06.10.2015, 22:25     Titel:
  Antworten mit Zitat      
Hallo Harald,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 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.