Verfasst am: 19.08.2014, 14:46
Titel: GUI schließt nicht beim beenden (GUIDE)
Hallo zusammen,
ich habe eine kleine GUI zum Selektieren meiner Datensätze erstellt (in GUIDE). Alles funktioniert einwandfrei, nur leider schließt sich die GUI nicht wie gewünscht, sobald ein lang dauerendes Skript danach ausgeführt wird.
Da das Problem irgendwie schwer zu beschreiben ist, schreib ich jetzt einfach noch ein paar Worte dazu.
In meiner Testumgebung (wenig Datensätze - kurze Rechendauer) funktioniert alles ohne Probleme - GUI schließt sich wie gewünscht.
Sobald ich einen uigetdir Befehl (Zwischenlösung um das Skript nicht ständig zu ändern, falls ich andere Daten einlesen will) danach aufrufe schließt sich die GUI ebenfalls wie gewünscht.
Aber sobald ich den "festen Ordner" aus meinen Berechnungsskript verwende, bleibt die GUI solange offen bis das nun sehr lange Berechnungsskript komplett durchgelaufen ist.
Ich hoffe ihr versteht mein Problem - zusätzlich sollte ich vielleicht erwähnen, dass das eine meiner ersten GUI's ist. Es könnte also durchaus ein kleiner Anfängefehler sein. (Verdacht dass irgendwas mit dem uiwait schief läuft)
Anbei mein zusammengefasster Code:
Code:
% End initialization code - DO NOT EDIT
% --- Executes just before NutzerAuswahlGUI is made visible. function NutzerAuswahlGUI_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to NutzerAuswahlGUI (see VARARGIN)
% Choose default command line output for NutzerAuswahlGUI
handles.output = hObject;
% UIWAIT makes NutzerAuswahlGUI wait for user response (see UIRESUME)
uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line. function[IndikatorPhase, AuswahlRID, Indikator76] = NutzerAuswahlGUI_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
% % Get default command line output from handles structure % varargout{1} = handles.output;
% --- Executes on button press in pushbuttonAuswertung. function pushbuttonAuswertung_Callback(hObject, eventdata, handles) % hObject handle to pushbuttonAuswertung (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA)
uiwait: wie beschrieben der Nutzer soll hier Datensätze auswählen. ohne uiwait ist das Skript einfach durchgelaufen.
uiresume: ich glaube ich habe in der Hilfe gelesen, dass uiresume oder das schließen der figure die outputfunction startet. Nachdem ich Probleme bei der Einordnung von uiresume hatte fand ich die Lösung ganz geschickt.
Aber wie am Anfang beschrieben sollte hier der Hund begraben liegen.
vermutlich meinst du das (falls nicht, bitte Link posten):
Zitat:
uiwait blocks execution until uiresume is called or the current figure is deleted.
Das Schließen einer GUI löst aber erst später das delete aus, und dazu kommt es eben nicht.
Abhilfe dürfte wie gesagt das uiresume sein - üblicherweise nachdem der Nutzer seine Eingaben abgeschlossen hat.
Ich würde übrigens die Application Data nicht in 0 (root), sondern in die GUI an sich (handles.figure1) schreiben.
Grüße,
Harald
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 20.08.2014, 08:26
Titel:
Danke für deine Tipps - sind beide umgesetzt!
root: stimmt es, dass ich die letzten Übergabewerte für die outputfunc aber trotzdem noch in root hinterlegen muss, da ich ja mein figure bereits schließe um in die outputfunkction zu kommen?
uiresume: ja das Zitat hab ich wohl irgendwie falsch verstanden, bzw wusste ich das mit dem delete nicht.
aber gerade frage ich mich, was ich da gestern getestet habe bevor ich hier gepostet habe ?!
jetzt geht es zumindest - Danke.
root: stimmt es, dass ich die letzten Übergabewerte für die outputfunc aber trotzdem noch in root hinterlegen muss, da ich ja mein figure bereits schließe um in die outputfunkction zu kommen?
Probiers doch mal aus. Ich würde sagen: nein - die Figure wird ja erst nach dem Ausführen der outputfcn tatsächlich gelöscht.
Man kann das Verhalten beim Schließen übrigens auch anpassen - und z.B. das Schließen "verweigern", wenn noch keine oder keine sinnvollen Eingaben gemacht wurden -, indem man die closerequestfcn anpasst:
http://www.mathworks.de/de/help/mat.....ose-request-function.html
Grüße,
Harald
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.