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 Push Button Initialisieren

 

Leibi
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 02.05.2013, 18:29     Titel: GUI Push Button Initialisieren
  Antworten mit Zitat      
Hi,

mir bereitet mein zweiter Push-Button (Tag: SaveCurve) im GUI Probleme.
Der erste Button funktioniert ohne Probleme. Der zweite wird etwas weiter unten im Code mit dem von GUIDE erstellten Code initialisert. Das Programm läuft bis zum Button problemlos, beim Betätigen des Buttons erscheinen folgende Fehlermeldungen:
Code:

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in GUI (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)GUI('SaveCurve_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback


Muss ich im Header irgendwas ändern, wenn ich nen neuen Push-Button einfüg?

Sorry, dass meine Beschreibung wahrscheinlich net vollständig is...

Danke

MfG
Leibi
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: 02.05.2013, 19:52     Titel:
  Antworten mit Zitat      
Hallo,

GUIDE versucht eine Funktion SaveCurve_Callback aufzurufen. Dabei scheint etwas schiefzugehen. Was schiefgeht, sollte über deinen kopierten Fehlermeldungen stehen. Das entscheidende fehlt also wohl leider.
Für den Anfang: existiert denn eine Funktion diesen Namens?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 02.05.2013, 20:30     Titel:
  Antworten mit Zitat      
Hi,

Danke für die schnelle Antwort!

Die Funktion SaveCurve_Callback existiert:

Code:

function SaveCurve_Callback(hObject, eventdata, handles)
% hObject    handle to SaveCurve (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
TargetSR = str2num(get(handles.TargetSR,'string'));
assignin('base','TargetSR',TargetSR);
 


Die Variable TargetSR wird richtig eingelesen und erscheint auch im Workspace. Wenn man allerdings irgedwas mit ihr anstellen will, kommts zu Fehlern...

Wenn ich mitten im Code die Funktion aufruf, muss ich dann nochmal neu initialisieren?

Danke

MfG
Leibi
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: 02.05.2013, 20:40     Titel:
  Antworten mit Zitat      
Hallo,

dann solltest du vor allem die eigentliche Fehlermeldung und den relevanten Code posten. Wie gesagt, der entscheidende Teil der Fehlermeldung sollte über dem von dir genannten Teil stehen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 03.05.2013, 11:59     Titel:
  Antworten mit Zitat      
Hi,

in meinem ersten Post war die Fehlermeldung, die in der Command-Line erschien.
Ich hab jetzt nach dem Einlesen des Wertes TargetSR nochmal eine Abfrage reingebaut, ob der einen zulässigen Wert überschreitet.
TargetSR wird richtig eingelesen und erscheint auch als double-Wert im Workspace. Sobald man ihn allerdings verwenden will, kommt der Fehler.

Hier die komplette Fehlermeldung, die in der Command-Line erscheint:
Code:

Error in GUI>CreateSRCYC_Callback (line 470)
if (TargetSR > YMax)

Error in gui_mainfcn (line 96)
        feval(varargin{:});

Error in GUI (line 42)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)GUI('CreateSRCYC_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback
 


Hier ist der Code, der mit dem Feld zur Eingabe des Wertes und dem Button zusammenhängt:

Code:

function TargetSR_Callback(hObject, eventdata, handles)
% hObject    handle to TargetSR (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: get(hObject,'String') returns contents of TargetSR as text
%        str2double(get(hObject,'String')) returns contents of TargetSR as a double


% --- Executes during object creation, after setting all properties.
function TargetSR_CreateFcn(hObject, eventdata, handles)
% hObject    handle to TargetSR (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: edit controls usually have a white background on Windows.
%       See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor','white');
end

% --- Executes on button press in CreateSRCYC.
function CreateSRCYC_Callback(hObject, eventdata, handles)
% hObject    handle to CreateSRCYC (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
TargetSR = str2num(get(handles.TargetSR,'string'));
assignin('base','TargetSR',TargetSR);

%TargetSR = double(TargetSR);
if (TargetSR > YMax)
    fprintf('Die gewünschte Dehnrate überschreitet den vorhandenen Dehnratenbereich!');
    return;
else if (TargetSR < YMin)
        fprintf('Die gewünschte Dehnrate unterschreitet den vorhandenen Dehnratenbereich!');
        return;
    end
end
 


Dabei gehört der Tag TargetSR zu dem Feld, in dem ich den Wert eingebe und CreateSRCYC ist der Tag des Push-Buttons mit dem der Wert eingelesen wird.

Danke!

MfG
Leibi
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.05.2013, 12:06     Titel:
  Antworten mit Zitat      
Hallo,

die eigentliche Fehlermeldung, was in dieser Zeile schief geht, fehlt nach wie vor. Es würde mich erstaunen, wenn da nichts davor kommt.

YMax wird in der Funktion nicht definiert und kann daher auch nicht bekannt sein.

Was soll denn das assignin?

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 03.05.2013, 12:21     Titel:
  Antworten mit Zitat      
Hi,

mehr steht nicht in meiner Command-Line. Wo steht die eigentlich Fehlermeldung?

YMax wir vorher im Code definiert? Kann ich da nicht drauf zugreifen?

Des assignin hab ich reingemacht, um zu schauen, ob TargetSR richtig eingelesen wird.

Sorry, dass ich mich so blöd anstelle, aber das GUI ist mir noch etwas rätselhaft...

Danke

MfG
Leibi
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.05.2013, 12:48     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Wo steht die eigentlich Fehlermeldung?

Sie sollte unmittelbar vor der anderen Fehlermeldung stehen. Ggf. musst du hochscrollen. Ich würde etwas wie Undefined function or variable Ymax erwarten.

Zitat:
YMax wir vorher im Code definiert? Kann ich da nicht drauf zugreifen?

Nicht, wenn es in einer anderen Unterfunktion definiert wird. Jede (Unter-)Funktion hat einen eigenen Workspace. Man muss also neu definieren oder dafür sorgen, dass die Daten verfügbar sind, siehe
http://www.mathworks.com/help/matla.....-data-in-a-guide-gui.html

Zitat:
Des assignin hab ich reingemacht, um zu schauen, ob TargetSR richtig eingelesen wird.

Einen Haltepunkt zu setzen wäre wohl einfacher. Dann würdest du zudem sehen, ob Ymax verfügbar ist oder nicht.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 03.05.2013, 13:59     Titel:
  Antworten mit Zitat      
Hi,

ich hab nochmal geschaut, mehr steht da wirklich nicht...
Hab nen Haltepunkt gesetzt und geschaut, YMin und YMax sind nicht da...
Da ich der zweiten Funktion mehr Variablen übergeben muss, will ich die Variablen mit setappdata übergeben, da guidata und userdata auf eine Variable limitiert sind.

Dann müsste der Code in meiner ersten Funktion, in der YMin definiert wird, doch folgendermaßen lauten:
Code:

setappdata(CreateSRCYC_Callback,'YMin',YMin);
 


In der CreateSRCYC_Callback ruf ich die Variable dann mit
Code:

YMin = getappdata(PrepImport_Callback,'YMin');
 

aufrufen (YMin wird in der Funktion PrepImport_Callback definiert).

Irgendwie funktioniert des aber net...

Danke

MfG
Leibi
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.05.2013, 14:04     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
ich hab nochmal geschaut, mehr steht da wirklich nicht...

Das wäre sehr verwunderlich. Wenn ich die komplette GUI habe, kann ich's gerne mal bei mir versuchen.

Zitat:
setappdata(CreateSRCYC_Callback,'YMin',YMin);

Nein, als erstes Argument muss ein Handle übergeben werden, z.B. handles.figure1 (Standard-Handle der Figure).

Zitat:
YMin = getappdata(PrepImport_Callback,'YMin');

Nein, siehe setappdata-Befehl.

Zitat:
Irgendwie funktioniert des aber net...

Solche Aussagen sind nicht sehr hilfreich.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 02.05.13
Wohnort: Erlangen
Version: R2012a
     Beitrag Verfasst am: 03.05.2013, 14:57     Titel:
  Antworten mit Zitat      
Hi,

mit dem
Code:

setappdata(handles.figure1,'YMin',YMin)

hats funktioniert.

Jetzt macht mein Programm was es soll!

Kann ich des handles.figure1 einfach immer standardmäßig drinnen lassen oder söllte ich des besser auf das jeweilige Objekt spezifizieren?

Vielen herzlichen Dank für die Hilfe!

MfG
Leibi
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.05.2013, 15:12     Titel:
  Antworten mit Zitat      
Hallo,

wenn das Handle zur Figure handles.figure1 ist, würde ich das so lassen. Wenn Daten zu einem bestimmten GUI-Element gehören, kann man sie aber genausogut diesem Element zuordnen.

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