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

Close button funktioniert nicht

 

FeLe
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 05.02.2013, 10:29     Titel: Close button funktioniert nicht
  Antworten mit Zitat      
Hallo allerseits
Es tut mir leid euch mit meinen Dummheiten von der Arbeit abzubringen, aber ich habe wieder Verständnis Problem Embarassed ;
Ich habe das Programm geschrieben, was, für die Eingabe, das GUI aufruft. GUI ist mit GUIDE erstellt und hat ein „close button“, um das Fenster zu beenden wenn man, zum Beispiel, anderes überleg hat und das Programm einfach beenden will.
Das Problem ist; mit dem Code:

Code:

function Exit_Callback(hObject, ~, handles)
delete(handles .figure1)
 


Kriege ich Fehlermeldung von OutputFcn; „Attempt to reference field of non-structure array.“
Was nichts anderes bedeutet, dass das GUI beim Schließen die Nutzer-Eingaben dem Hauptprogram übergeben will. Es sind aber keine gemacht. Wenn ich aber die Eingaben gemacht habe und dann auf „Exit“ drücke, wird die Auswertung regulär gestartet. Dafür sollte aber nur „Start“-Taste zuständig sein.
Ich füge hier nicht gesamt GUI-Code, zu viele Zeilen.

Code:

%% --- Executes just before gui is made visible
function OpeningFcn(hObject, ~, handles, varargin)
% paths initialisation
initpath = pwd;
handles.path = initpath;
handles.testprofpath = initpath;
handles.analysepath = initpath;
handles.resultspath = initpath;
handles.AddText = get(handles.AddTxt,'String');
set(handles.pathtestprof,'String',fullfile(handles.path,'StdP'));
set(handles.pathdatanls,'String',handles.path);
set(handles.pathresults,'String',handles.path);
% axes(hObject);
imshow('Conti_logo.jpg');
guidata(hObject, handles);

uiwait(hObject)

%% --- Outputs from this function are returned to the command line.
function varargout = OutputFcn(hObject, eventdata, handles)
i = 1;
if isfield(handles, 'path')
    varargout{i} = handles.analysepath;    % return path info to comand line
    i = i + 1;
end
if isfield(handles, 'sID')
    varargout{i} = handles.sID;     % return sensor IDs to comand line
    i = i + 1;
end
if isfield(handles, 'param')
    varargout{i} = handles.param;   % return parameter setings for alnalysis
    i = i + 1;
end
if isfield(handles, 'resultspath')
    varargout{i} = handles.resultspath;   % return parameter setings for alnalysis
    i = i + 1;
end
if isfield(handles, 'AddText')
    varargout{i} = handles.AddText;        % return addition text
    i = i + 1;
end
delete(handles.figure1)

%% --- Executes when user attempts to close figure1.
function CloseRequestFcn(hObject, ~,handles)

if isequal(get(hObject, 'waitstatus'), 'waiting')
    % The GUI is still in UIWAIT, us UIRESUME
    uiresume(hObject);
    setappdata(hObject,'waiting',0)
else
    % The GUI is no longer waiting, just close it
    delete(hObject);
end

function Exit_Callback(hObject, ~, handles)
% ps100gui_OutputFcn(hObject, handles)
% uiresume(handles.figure1);
% figure1_CloseRequestFcn(handles.figure1)
% close(handles.figure1);
delete(handles.figure1)

 


Was mache ich falsch ?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 05.02.2013, 10:50     Titel: Re: Close button funktioniert nicht
  Antworten mit Zitat      
Hallo FeLe,

Bitte erkläre noch, in welcher Zeile der Fehler erscheint.
Welchen Wert und Typ hat denn handles, wenn der Fehler auftritt? Ein einfaches DISP oder "dbstop if error" erlauben dies genau herauszufinden.

Häufig wird "handles" nicht vollständig an die Callbacks übergeben, da hier der Wert des Structs zu dem Zeitpunkt der Erstellung des Callbacks verwendet wird. Dann wäre ein Update sinnvoll:
Code:
function Exit_Callback(hObject, ~, handles)
handles = guidata(hObject)

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 05.02.2013, 11:13     Titel: Close button funktioniert nicht
  Antworten mit Zitat      
Der Fehler tritt in der Zeile; „delete(handles.figure1)“ in OutputFcn. Irgendwie ist die figure, zu dem Zeitpunkt des Aufrufs von OutputFcn, schon gelöscht .
Private Nachricht senden Benutzer-Profile anzeigen
 
FeLe
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 09.12.10
Wohnort: Frankfurt a.M.
Version: Matlab 2013a
     Beitrag Verfasst am: 05.02.2013, 11:22     Titel: Close button funktioniert nicht
  Antworten mit Zitat      
Ich verstehe nicht das ganze Mechanismus dahinter. Ich dachte, dass OutputFcn wird nur dann aufgerufen, wenn ich mein GUI regulär, mit „Start“-Taste, beende. In der Matlab-Hilfe steht; „at each iteration“. Wie baue das Ganze um, dass die OutputFcn nur dann aufgerufen wird, wenn ich tatsächlich Rückgabe-Wert habe und in allen anderen Fällen das Fenster einfach geschlossen wird?
Private Nachricht senden Benutzer-Profile anzeigen
 
marc-205
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 12.12.12
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 06.02.2013, 10:58     Titel:
  Antworten mit Zitat      
ich glaube das geht, wenn du in der Opening function statt uiwait(hObject) den befehl waitfor nutzen würdest.
Code:
waitfor(handles.pushbutton1) %handle deines Startbuttons


dann dürften zumindest die anderen Callbacks nicht abgefragt werden, solange du nicht auf den Pushbutton drückst. Ob das mit der Outputfunction auch funktioniert, weiß ich nicht. Probier es mal aus.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 07.02.2013, 21:02     Titel:
  Antworten mit Zitat      
naja wenn der close-Button-Callback die Figure vernichtet,

kann es die output-Fcn ja schlecht nochmal machen.


Entweder, der close button bekommt, die "CloseRequestFcn"
als Callback

oder

uiresume wird niemals ausgeführt

oder

du prüfst, in der outputfunktion ob das Figure bereits vernichtet wurde
und machst es dann nicht

if exist( 'handles' ) & isstruct( handles )
delete(handles.figure1)
end


Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.02.2013, 11:50     Titel:
  Antworten mit Zitat      
Hallo Bluesmaster,

Vorsicht bei:
Code:

das testet, ob es ein "handles.m" File im Matlab Pfad gibt, eine Java Funktion, ein Ordner im aktuellen Pfad, eine Variable, etc. Einerseits kann das Suchen sehr lagnsam sein, andererseits liefert es oft unerwartete Treffer. Besser:
Code:
if exist('handles', 'var')

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 08.02.2013, 12:15     Titel:
  Antworten mit Zitat      
Völlig richtig.

Prinzipiell wollte ich sage: Figure schon weg? > So what? Smile

Try-Catch - Block ohne Fehlerbehandlung tuts zum Beispiel auch.

Bei höherer Komplexität sollte man der Sache dann schon auf den Grund
gehen aber um das schnell zu richten gehts.

Gruß

Blues
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 - 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.