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

Handles scope in GUI

 

dav
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 07.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.09.2009, 21:46     Titel: Handles scope in GUI
  Antworten mit Zitat      
Hallo,

ich stehe gerade vor einem Problem bei einem mit guide geschriebenen GUI, bei dem ich auf dem Schlauch stehe:
Als Beispiel ein kleines Programm zur Demonstration. Es besteht aus 2 Pushbuttons samt Callbacks und einer Funktion "someFcn", die vom Callback von pushbutton_1 aufgerufen wird. In "someFcn" wird die Variable "dug" gesetzt und in den "handles" abgelegt.

Code:

% Auszug aus dem m-Code von guide
% function ts, ts_Opening, ts_OutputFcn sind unverändert, wie sie von guide erstellt werden

function pushbutton1_Callback(hObject, eventdata, handles)
handles.click = 1;
someFcn(hObject, eventdata, handles);
guidata(hObject, handles);


function someFcn(hObject, eventdata, handles)
handles.dug = 2;
guidata(hObject, handles);


function pushbutton2_Callback(hObject, eventdata, handles)
disp(handles.click);
disp(handles.dug);
guidata(hObject, handles);
 


Das Problem ist folgendes: Im Callback von "pushbutton_1" enthält "handles" noch die Varibale "dug" mit Wert 2. Wenn ich aber 2pushbutton_22 klicke, enthält "handles" "dug" überhaupt nicht mehr (resultiert in einem Fehler).
Da ich "dug" an die "handels" übergebe, dachte ich, es sollte in allen Callbacks verfügbar sein.
Kann mir jemand von euch sagen, was hier falsch läuft bzw. was ich übersehen habe?
Private Nachricht senden Benutzer-Profile anzeigen


LittleX
Forum-Guru

Forum-Guru


Beiträge: 494
Anmeldedatum: 14.05.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2009, 08:54     Titel:
  Antworten mit Zitat      
Hallo,

in der Funktion pushbutton1_Callback erzeugst Du handles.click, rufst dann someFcn auf (dabei wird handles inkl. .click übergeben). In someFcn fügst Du noch zusätzlich dug hinzu und speicherst guidata. Danach gehts in pushbutton1_Callback weiter. Dort fehlt das Feld dug in handles, da Du die Daten nicht neu von guidata geladen hast. Dann schreibst Du guidata wieder neu (in der Variante ohne dug).
Wenn Du die Zeile
Code:

guidata(hObject, handles);
 

aus pushbutton1_Callback entfernst, klappt das Ganze.

Viele Grüße,

LittleX
Private Nachricht senden Benutzer-Profile anzeigen
 
dav
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 07.09.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.09.2009, 09:57     Titel:
  Antworten mit Zitat      
Hallo LittleX,

danke für die Antwort! Ich sehe jetzt meinen Denkfehler. Ich dachte, dass die handles aus "someFcn" automatisch an den callback zurückgegeben werden - was ja offensichtlich nicht der Fall ist.
Wenn ich "click" nach dem Aufruf von "someFcn" setzen will, muss ich also schreiben:
Code:

someFcn(hObject, eventdata, handles);
handles = guidata(gcbo);
handles.click = 1;

guidata(hObject, handles);
 

Funktioniert sehr schön. Jetzt ist es mir klarer.

Viele Grüße
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.