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 schließt nicht beim beenden (GUIDE)

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2014, 14:46     Titel: GUI schließt nicht beim beenden (GUIDE)
  Antworten mit Zitat      
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;

% Update handles structure
guidata(hObject, handles);

Inhalt1 = xlsread

% .............................................
% .........................................
% ..................................

setappdata(0,'InhaltListbox1',InhaltListbox1);
% ........

set(handles.pushbuttonAuswertung, 'Visible', 'on');
% ........

% 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;

IndikatorPhase = getappdata(0, 'IndikatorPhase');
AuswahlRID = getappdata(0, 'AuswahlRID');
Indikator76 = getappdata(0, 'Indikator76');


% --- 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)

StatusPopup = get(handles.popupmenuPhasen, 'Value');

EntryListbox1 = getappdata(0, 'EntryListbox1');
EntryListbox2 = getappdata(0, 'EntryListbox2');
EntryListbox3 = getappdata(0, 'EntryListbox3');
EntryListbox4 = getappdata(0, 'EntryListbox4');
InhaltKomplett = getappdata(0, 'InhaltKomplett');
Indikator76 = get(handles.checkboxNN, 'Value');

switch StatusPopup    
    case 1
         % ..................
    case n

setappdata(0,'IndikatorPhase', Phasen);
setappdata(0,'AuswahlRID', RID);
setappdata(0,'Indikator76', Indikator76);
close all

 


Harald
Forum-Meister

Forum-Meister


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

warum verwendest du denn uiwait?

Und vor allem: wo ist das zugehörige uiresume?

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



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.08.2014, 15:01     Titel:
  Antworten mit Zitat      
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.
 
Harald
Forum-Meister

Forum-Meister


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

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2014, 08:26     Titel:
  Antworten mit Zitat      
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 ?! Embarassed
jetzt geht es zumindest - Danke.
 
Harald
Forum-Meister

Forum-Meister


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

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