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

Werte zwischen function's in GUI übergeben

 

Ausmilkel
Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 11.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.08.2008, 21:11     Titel: Werte zwischen function's in GUI übergeben
  Antworten mit Zitat      
Hallo,

ich bin Anfänger in der Programmierung mit GUI. Folgendes Problem
mittels Guide habe ich mir graphisches Fenster erstellt in diesem will ich eine Datei öffnen. Das sieht so aus:

Code:

function OpenMenuItem_Callback(hObject, eventdata, handles)            

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


[filename, pathname] = uigetfile('*.csv', 'Pick an csv-file');
if isequal(filename,0)
   disp('User selected Cancel')
else
   disp(['User selected', fullfile(pathname, filename)])
   Datenpfad= strcat(pathname,filename)
   
 


das klappt ganz gut. In Datenpfad steht jetzt der Pfad sowei der Dateiname als ein String.
Jetzt möchte ich die Variable Datenpfad an eine weitere function im selben .m-Code weitergeben. In dieser function soll diese Variable verwendet werden, etwa so:

Code:


function pushbutton4_Callback(hObject, eventdata, handles)

% hObject    handle to pushbutton4 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
 
% ab hier soll Datenpfad in einem Unterprogramm aus einem anderen .m-file verwendet werden...
...

 


Nun hab ich irgendwas mit guidata(hobject,data) gelesen im Forum und in der Hilfe. Ich komme leider bei der Umsetzung nicht klar. Kann mir bitte jemand weiterhelfen? Ich hoffe das Problem ist verständlich und sicherlich für euch leicht zu lösen Wink

Vielen Dank für eure Bemühungen

mfg
Robert
Private Nachricht senden Benutzer-Profile anzeigen


Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 12.08.2008, 22:00     Titel:
  Antworten mit Zitat      
Also alle die Ahnung haben bitte mal kurz wegschauen!
BEEEEP
Einfach und schnell geht es, wenn du die Variable in beiden functions "global" machst.
Das ist aber natürlich sehr unschön! Etwas schöner ist es ein Textfeld zu machen, in dem du den User anzeigst welchen Pfad er gewählt hat und diesen dann mit der anderen function wieder ausliest.

Jetzt dürfen alle wieder lesen!
Eine Erklärung wie man in einem mit GUIDE erzeugten GUI sauber mit guidata umgeht könnte ich auch gebrauchen!
Gruß das Möbel
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.08.2008, 06:47     Titel:
  Antworten mit Zitat      
Moin,

schaut euch dazu einfach mal dieses Beispiel von mir an:
Klick!

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Ausmilkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 11.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2008, 07:52     Titel:
  Antworten mit Zitat      
Moin,

also dein Beispiel hab ich gestern auch noch gefunden. Funktioniert wunderbar. Ich möchte nur nicht unnötig zusätzliche Dateien erzeugen. Deswegen hoffe ich dass es noch was einfacheres gibt Wink
Dennoch erst mal ein Dankeschön von mir an euch für die Tipps.

Bin auch weiterhin offen für neue Hinweise Smile

mfg
Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.08.2008, 07:59     Titel:
  Antworten mit Zitat      
Du musst doch auch keine Dateien erzeugen, wenn du nicht willst!

Es geht bei dem Beispiel auch darum, wie man die Werte von einer Funktion für eine andere verfügbar macht, eben mit
Code:
guidata(hObject,handles)


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 13.08.2008, 09:38     Titel:
  Antworten mit Zitat      
Hallo steve,
ich kapere hier einfach mal den Thread. Smile
Um also einen Wert innerhalb eines GUIs verfügbar zu machen muss ich
Code:
handles.wert = wert;
guidata(hObject, handles)

in die Funktion mit dem Wert schreiben und kann anschließend in allen Funktionen mit
Code:
handles.wert
auf diesen Wert zugreifen? Dabei muss ich aber aufpassen das ich keinen Namen verwende der einem "Tag" eines Objektes zugeordnet ist, weil ich diesen sonst überschreibe?

Würde das auch mit
Code:
test.wert = wert;
guidata(hObject, test)
funktionieren?

Kleine Anregung am Rande, in deinem übrigens sehr schönem Beispiel hast du das speichern und laden sehr schön kommentiert. Zu guidata hast du aber keine Silbe Kommentar spendiert, wahrscheinlich hat Ausmilkel das deswegen auch überlesen.

Danke
Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.08.2008, 09:47     Titel:
  Antworten mit Zitat      
Schrank hat Folgendes geschrieben:
Hallo steve,
ich kapere hier einfach mal den Thread. Smile
Um also einen Wert innerhalb eines GUIs verfügbar zu machen muss ich
Code:
handles.wert = wert;
guidata(hObject, handles)

in die Funktion mit dem Wert schreiben und kann anschließend in allen Funktionen mit
Code:
handles.wert
auf diesen Wert zugreifen? Dabei muss ich aber aufpassen das ich keinen Namen verwende der einem "Tag" eines Objektes zugeordnet ist, weil ich diesen sonst überschreibe?

Würde das auch mit
Code:
test.wert = wert;
guidata(hObject, test)
funktionieren?

Nein, das würde nicht funktionieren, da bei den mit GUIDE erstellten GUIs immer "handles" das Standard-Struct ist. Dadurch musst du dann alle Werte, die du benötigst auch in diesem Struct speichern.

Schrank hat Folgendes geschrieben:
Kleine Anregung am Rande, in deinem übrigens sehr schönem Beispiel hast du das speichern und laden sehr schön kommentiert. Zu guidata hast du aber keine Silbe Kommentar spendiert, wahrscheinlich hat Ausmilkel das deswegen auch überlesen.

Danke für den Hinweis. Ich werde es bei der nächsten Gegelegenheit nachholen.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Ausmilkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 11.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2008, 09:53     Titel:
  Antworten mit Zitat      
ok , so genau hatte ich das gestern abend nich mehr gelesen, bzw habs überlesen und nur das mit dem save gefunden. Aber das mit guidata klappt wunderbar. Ich danke dir!

Gruß
Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
Ausmilkel
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 32
Anmeldedatum: 11.08.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2008, 10:00     Titel:
  Antworten mit Zitat      
Ergänzung:

Zitat:

Würde das auch mit
Code:

test.wert = wert;
guidata(hObject, test)
 


funktionieren?


bei mir hat es nach der Änderung im .m-File funktioniert.

Noch eine allgemeine Frage dazu:
Bei handles.wert wäre jetzt handles das struct, und wert ein Element der Struktur? Sehe ich das Richtig?

Gruß
Robert
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.08.2008, 12:33     Titel:
  Antworten mit Zitat      
Funktionieren wird es aber nur solange, bis du versuchst danach auf ein anderes handles-Objekt zuzugreifen. Denn du überschreibst damit alles und es ist dann nur test.wert verfügbar und test wird keine weiteren Felder beinhalten, anders als handles.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 14.08.2008, 10:56     Titel:
  Antworten mit Zitat      
Hallo Alex,
immer wenn ich denke ich habe etwas vetstanden kommt kurz danach der Moment zum Nachfragen...
Ich bemühe mich jetzt guidata ausführlich zu nutzen. Habe nun aber das Problem das ich in meinem GUI in einer function eine andere function aufrufe in der ich handle.wert = 23 definiere und da drunter
Code:
guidata(hObject,handles)
zu stehen habe.
Zurück in der ersten function kann ich auf diese function nicht mehr zugreifen. Siehe hier:
Code:
% --- Executes on button press in StartButton.
function StartButton_Callback(hObject, eventdata, handles)
Test(hObject, handles)
msgbox(handles.Wert); %warum kennt er hier kein handles.Wert????
function Test(hObject, handles)
handles.Wert = 23; %handles.Wert wird definiert
guidata(hObject,handles) %structure wird geupdatet.

Warum?
Danke für Deine Geduld
Grüße Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.08.2008, 11:20     Titel:
  Antworten mit Zitat      
Moin,

das liegt daran, dass du die gespeicherten Daten erst noch wieder extrahieren musst - Allerdings weiß ich auch nicht wieso, weshalb, warum...

Code:
% --- Executes on button press in StartButton.
function StartButton_Callback(hObject, eventdata, handles)
Test(hObject, handles)
handles = guidata(hObject);
msgbox(num2str(handles.Wert)); % hier muss außerdem ein String übergeben werden
function Test(hObject, handles)
handles.Wert = 23; % handles.Wert wird definiert
guidata(hObject,handles) % structure wird geupdatet.


2. Möglichkeit:
Code:
% --- Executes on button press in StartButton.
function StartButton_Callback(hObject, eventdata, handles)
handles = Test(hObject, handles);
msgbox(num2str(handles.Wert)); % hier muss außerdem ein String übergeben werden
function handles = Test(hObject, handles) % hier ist jetzt auch richtig
handles.Wert = 23; % handles.Wert wird definiert
guidata(hObject,handles) % structure wird geupdatet.


Gruß
Alex

/edit: Fehler behoben Wink
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?

Zuletzt bearbeitet von steve am 14.08.2008, 12:32, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 14.08.2008, 12:10     Titel:
  Antworten mit Zitat      
WIE? Shocked
Ich werd wohl noch sehr lange brauchen bis ich Matlab verstehe!
Danke für die super Eklärungen
Schrank
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.08.2008, 12:31     Titel:
  Antworten mit Zitat      
Shocked AHHHHHHHHHHHHHHHHH!!!!

Verdammtes Copy&Paste...

der 2. Code muss natürlich so heißen:
Code:

% --- Executes on button press in StartButton.
function StartButton_Callback(hObject, eventdata, handles)
handles = Test(hObject, handles);
msgbox(num2str(handles.Wert)); % hier muss außerdem ein String übergeben werden
function handles = Test(hObject, handles) % <-- diese Zeile wars...
handles.Wert = 23; % handles.Wert wird definiert
guidata(hObject,handles) % structure wird geupdatet.
 

_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Schrank
Forum-Century

Forum-Century


Beiträge: 203
Anmeldedatum: 10.07.08
Wohnort: Berlin
Version: ---
     Beitrag Verfasst am: 14.08.2008, 12:55     Titel:
  Antworten mit Zitat      
mhh, hatte das zweite garnicht ausprobiert. Aber danke für die Korrektur, werde mir den Thread bestimmt noch ein zwei(dutzend) mal ansehen, wenn ich nen GUI bastel.
Gruß Schrank
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.