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

R2013a Variablenuebergabe zwischen Callback-Funktionen

 

Gast00920

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 09:58     Titel: R2013a Variablenuebergabe zwischen Callback-Funktionen
  Antworten mit Zitat      
Hi ,

das Thema gibt's zwar schon aber ich hab ne andere Frage zu dem Thema. in dem anderen Thread hab ich keine antwort bekommen, weil der schon als beantwortet festgelegt wurde glaube ich.
Deswegen hier nochmal:

Wenn man eine Variable aus einer Callback-Funktion in einer anderen verwenden will muss man ja nur in der ersten handles.var = var definieren und in der zweiten dann einfach handles.var verwenden.
Das hat bishier auch geklappt , aber jetzt benutze ich die aktuelle Version von Matlab also Matlab R2013a (vorher R2011a) und jetzt bekomme ich den Fehler, das var unbekannt ist.

Weiss jemand woran das liegt?

Liebe Gruesse


Gast00920

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 10:32     Titel:
  Antworten mit Zitat      
der Code lautet

[/code]
Code:
function erste_Callback(hObject, eventdata, handles)
handles.output = hObject;
CurFol = uigetdir();
set(handles.Folder , 'string' , CurFol)              
handles.CurFol = CurtFol;
etc.

function zweite_Callback(hObject, eventdata, handles)
handles.output = hObject;

CurFol= handles.CurFol;
cd(CurFol);
[format, sheets] = xlsfinfo(idXLS);

etc.
 


Hier wird CurFol nicht mehr erkannt. Mit Matlab R2011a hat das einwandfrei funktioniert.

danke in voraus!
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.07.2013, 10:48     Titel: Re: R2013a Variablenuebergabe zwischen Callback-Funktionen
  Antworten mit Zitat      
Hallo
Gast00920 hat Folgendes geschrieben:

Wenn man eine Variable aus einer Callback-Funktion in einer anderen verwenden will muss man ja nur in der ersten handles.var = var definieren und in der zweiten dann einfach handles.var verwenden.
Das hat bishier auch geklappt , aber jetzt benutze ich die aktuelle Version von Matlab also Matlab R2013a (vorher R2011a) und jetzt bekomme ich den Fehler, das var unbekannt ist.


VAR ist reserviertes Schlüsselwort, in Matlab steht das für Varianz-Funktion, deswegen sollte besser nicht als Variable verwendet werden. Dagegen als Feld in Struktur zu verwenden ist ok.

Mir ist nicht klar, meinst du, dass das gleiche Programm unter 2011 funktioniert hat und unter 2013 nicht mehr? Und du wirklich nicht verändert hast? Oder meinst nur die Vorgehensweise?

Bitte den Code der Beiden Callbacks posten und die komplette Fehlermeldung. Oder ein Minimalbeispiel erstellen, wo man dein Problem nachvollziehen kann. Weil momentan ist das ziemlich rätselhaft, was bei dir da schief läuft.

Zuletzt bearbeitet von denny am 18.07.2013, 13:14, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast00920

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2013, 11:08     Titel:
  Antworten mit Zitat      
Hi denny !
danke erstmal fuer die Antwort.

Also ich hab eine GUI erstellt mit Matlab R2011b . Der Code lautet
Code:
function erste_Callback(hObject, eventdata, handles)
handles.output = hObject;
CurFol = uigetdir();
set(handles.erste , 'string' , CurFol)              
handles.CurFol = CurFol;
etc.

function zweite_Callback(hObject, eventdata, handles)
handles.output = hObject;

CurFol= handles.CurFol;
cd(CurFol);
[format, sheets] = xlsfinfo(idXLS);
etc.

 


also ich will mit der ersten Callback funktion den Pfad: CurFol auswahlen und mit der zweiten in den Pfad wechseln um da weiterzuarbeiten.
Ich hab an dem Code nichts veraendert sondern nur mit der Matlab Version R2013a geoeffnet und die GUI nochmal laufen lassen.

Jetzt wird mir folgender Fehler angezeigt:

Code:
Error while evaluating uicontrol Callback

Reference to non-existent field 'CurFol'.
 


Ich hoffe du weisst jetzt wo das Problem liegt. =(
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 18.07.2013, 13:10     Titel:
  Antworten mit Zitat      
Hallo

ich kann leider nur vermuten, dass du entweder keinen GUIDATA-Befehl in deinem ersten Callback hast, und deswegen die Änderungen nicht in handles abgespeichert werden, oder etwas an der Übergabe der Handles schief läuft.

Kannst du die Callback-Definition, welche du mit GUI-Elemet verknüpft hast, auch posten? Ich meine in GUIDE, und zwar aus PropertyInspector entsprechenden Callback-Definition.



Aber vermutlich das erstere, oder?
sollte in die Richtung laufen

Code:


function erste_Callback(hObject, eventdata, handles)
handles.output = hObject;
CurFol = uigetdir();
set(handles.erste , 'string' , CurFol)              
handles.CurFol = CurFol;

% GUIDATA ist wichtig, um die gemachte Änderungen in der Funktion zu sichern
% hier solltest du MainFigure auf den TagNamen deines Fenster anpassen
guidata(handles.MainFigure, handles)

function zweite_Callback(hObject, eventdata, handles)
handles.output = hObject;

CurFol= handles.CurFol;
cd(CurFol);
[format, sheets] = xlsfinfo(idXLS);
etc.

 
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast00920

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.07.2013, 05:23     Titel:
  Antworten mit Zitat      
Hallo denny,

ich schliesse jede Callback -Funktion mit guidata(hObject, handles)
Code:
function erste_Callback(hObject, eventdata, handles)
handles.output = hObject;
CurFol = uigetdir();
set(handles.erste , 'string' , CurFol)              
handles.CurFol = CurFol;
etc.
guidata(hObject, handles)

function zweite_Callback(hObject, eventdata, handles)
handles.output = hObject;

CurFol= handles.CurFol;
cd(CurFol);
[format, sheets] = xlsfinfo(idXLS);
etc.
guidata(hObject, handles)
 


wie gesagt bei Matlab R2011b hat alles geklappt.

in den Propertyexpectors der beiden GUI Objecte steht

MainFigure('erste_Callback',hObject,eventdata,guidata(hObject))
MainFigure('zweite_Callback',hObject,eventdata,guidata(hObject))

Habs auch einmal mit guidata(handles.MainFigure , handles) unter beiden Funktionen probiert. Also
Code:
function erste_Callback(hObject, eventdata, handles)
handles.output = hObject;
CurFol = uigetdir();
set(handles.erste , 'string' , CurFol)              
handles.CurFol = CurFol;
etc.
guidata(handles.MainFigure, handles)

function zweite_Callback(hObject, eventdata, handles)
handles.output = hObject;

CurFol= handles.CurFol;
cd(CurFol);
[format, sheets] = xlsfinfo(idXLS);
etc.
guidata(handles.MainFigure, handles)
 



Klappt auch nicht =(
 
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.07.2013, 08:26     Titel:
  Antworten mit Zitat      
Hallo,

wenn sichergestellt ist, dass erste_callback vor zweite_callback ausgeführt wird, sollte es hiermit kein Problem geben.

Bitte zudem auch immer sicherstellen, dass die GUI über die .m-Datei gestartet wird (und nicht über die .fig).

Falls dies nicht weiterhilft, bitte ein lauffähiges Minimalbeispiel (.m + .fig) posten.

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

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 19.07.2013, 10:27     Titel:
  Antworten mit Zitat      
Hallo

da hat Harald recht, in welcher Reihenfolge führst du deine Callbacks aus.

Sonst kein ich deinen Fehler nicht reproduzieren, habe schon probiert in alten Matlab Version (2009a) GUI zu erzeugen und unter 2013a ausführen. Wie gesagt funktioniert ohne Probleme
Deswegen ohne eines lauffähigen Beispiels, wo dieses Problem auftaucht, kann man dir nicht weiter helfen. (fig und m -file werden benötigt)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast00920

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 06:09     Titel: .m und .fig file
  Antworten mit Zitat      
Hey,

so habe eine .m .fig und eine .xls file ausgewaehlt.

Also zuerst soll ein Ordner, dann eine excel file und dann die sheets aus der Excelfile ausgewaehlt werden...

Danke!!

Versuch1umhanldeszupruefen.m
 Beschreibung:

Download
 Dateiname:  Versuch1umhanldeszupruefen.m
 Dateigröße:  6.76 KB
 Heruntergeladen:  377 mal
Book1.xls
 Beschreibung:

Download
 Dateiname:  Book1.xls
 Dateigröße:  24 KB
 Heruntergeladen:  353 mal
Versuch1umhanldeszupruefen.fig
 Beschreibung:

Download
 Dateiname:  Versuch1umhanldeszupruefen.fig
 Dateigröße:  2.51 KB
 Heruntergeladen:  339 mal
 
Harald
Forum-Meister

Forum-Meister


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

in Zeile 89 deines Codes sollte es wohl heißen:
Code:
guidata(handles.figure1 , handles)


Ansonsten bekomme ich, wenn ich die Callbacks der Reihe nach (d.h. von oben nach unten) ausführen lasse, keine Fehlermeldungen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.07.2013, 09:06     Titel:
  Antworten mit Zitat      
Hi Harald und Denny,

hab R2011b nochmal installiert, da hats dann wieder geklappt. Habs dann nochmal bei 2013a versucht und da hats dann auch geklappt ( Zeile 89 hatte ich vorher gar nicht drin und da hatte es auch nicht geklappt und jetzt funktionierts auch ganz ohne die Zeile )

oooooh man was sollte das .. voll die Zeitverschwendung... Ich mag matlab nicht -.-

Aber danke euch, ihr seid super =)..
 
Harald
Forum-Meister

Forum-Meister


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

klar, Zeile 89 ist überflüssig, da in Zeile 90 ja ohnehin das Update gemacht wird.

Ich vermute, dass die Ursache des Problems ein Flüchtigkeitsfehler (z.B. Ausführen von Kommandozeile, aber vorher nicht gespeichert) oder ähnliches war - oder eben, dass du die Popups in der falschen Reihenfolge aktiviert hast. MATLAB kann dafür aber wohl eher wenig ;)

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.