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

callback/ Variablen an Funktion übergeben und durchlaufen

 

Nikki
Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2014, 12:06     Titel: callback/ Variablen an Funktion übergeben und durchlaufen
  Antworten mit Zitat      
Hallo zusammen,

ich mache grade meine ersten GUI-Schritte und trotz der Suchfunktion hier im Forum komme ich leider nicht weiter Sad

Ich möchte gerne ein gui erstellen in dem der Nutzer insgesamt sieben Daten eingeben muss. Vier davon per Hand und weitere drei aus Excel einlesen.

Duch den Pushbuttom sollen alle diese Daten eingelesen und an eine .m-Funktion zum auswerten übergeben werden. Bis jetzt konnte ich nur ein gui mit guide erstellen mit den edit/ text Fenstern.

Ich denke ich muss callback benutzen, aber ich weiß nicht genau wie.
Ich danke allen schon mal im Voraus!

Nikki
Private Nachricht senden Benutzer-Profile anzeigen


Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2014, 13:00     Titel:
  Antworten mit Zitat      
Hallo nochmal,

das Einlesen der Eingabedaten, habe ich hingekriegt Smile
Nun bleibt nur noch die Frage, wie ich das Einlesen der Excel Datei machen. kann. Das habe ich im Forum gefunden. Aber wofür steht die Eins?
und wie kann ich ein Fenster öffnen, so dass der User sich die Datei selber aussucht?


Code:

Dateiname, Dateipfad]=uigetfile;

Geschwindigkeit = xlsread(fullfile(Dateipfad,Dateiname), -1);
 


Nikki
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: 20.09.2014, 13:52     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Aber wofür steht die Eins?

Bei Fragen bitte zunächst mal in die Doku schauen. Dort steht dazu:
Zitat:
___ = xlsread(filename,-1) opens an Excel window to interactively select data. Select the worksheet, drag and drop the mouse over the range you want, and click OK. This syntax is supported only on Windows systems with Excel software.


Zitat:
und wie kann ich ein Fenster öffnen, so dass der User sich die Datei selber aussucht?

Mit uigetfile - aber das nutzt du doch schon?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2014, 16:34     Titel:
  Antworten mit Zitat      
nein, noch nutze ich kein uigetfile.

Wo genau muss uigetfile eingefügt werden? bei

Code:

function listbox_Callback(hObject, eventdata, handles)
 


und wie muss ich den Pfad eingeben? bei meiner Eingabe

Code:

[A,Users/nikki/Documents/MATLAB/B_Eingabe.xls]=uigetfile;
Auftraege=xlsread(fullfile(Users/nikki/Documents/MATLAB/A.xls),-1);
 


kommt der folgende Fehler

Code:

Error: File: GUI_01.m Line: 228 Column: 12
An array for multiple LHS assignment cannot contain expressions.
 


Viele Grüße,
Nikki
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: 20.09.2014, 16:59     Titel:
  Antworten mit Zitat      
Hallo,

dein von dir selbst geposteter Code enthält doch uigetfile, und das schon in der richtigen Verwendungsweise.

Zitat:
Wo genau muss uigetfile eingefügt werden?

Da, wo es ausgeführt werden soll. Das ist deine Entscheidung als Entwickler der Oberfläche.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 20.09.2014, 16:59     Titel:
  Antworten mit Zitat      
Du hast doch schon alles! uigetfile öffnet dir das Auswahlfenster für deinen xls file und gibt den Pfad und Name zurück, welche du dann an die xlsread function übergibst.

Code:
[Dateiname, Dateipfad] = uigetfile('*.xls','Waehle xls file:');

Auftraege = xlsread(fullfile(Dateipfad,Dateiname));


Die erste Frage kann man doch nicht beantworten, da Infos über deine GUi fehlen und bei welchem Event du Einlesen willst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.09.2014, 21:03     Titel:
  Antworten mit Zitat      
vielen Dank für eure Antworten!
es funktioniert als ich uigetfile bei einer Listbox benutz habe. Bei einem text-Feld nicht.

Jedoch ist es so, dass vier Möglichkeiten in der Listbox anzuklicken sind. Und sobald ich eins anklicke, werden vier Festern zum aussuchen der xls. Datei geöffnet. Was muss ich tun, damit zu jeder Möglichkeit nur ein Fenster sich öffnet.

Nikki
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: 20.09.2014, 21:55     Titel:
  Antworten mit Zitat      
Hallo,

bitte anhand von Code genau aufzeigen, was du versuchst und vor allem auch dazu schreiben, was daran (bei einem edit-Feld) nicht funktioniert.

Grüße,
Harald
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: 20.09.2014, 22:01     Titel:
  Antworten mit Zitat      
Hallo Nikki,

Verwende doch mal den debugger um zeilenweise durch den code zu gehen. Dann findest Du heraus, welche Befehle die 4 Fenster öffnen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2014, 11:30     Titel:
  Antworten mit Zitat      
Hallo,

ich denke, mir fehlt ein Befehl der das angeklickte mit dem jeweiligen uigetfile verbindet. Macht man das mit set?
Meine anderen Daten kriege ich auch nicht verbunden...

Code:


function mutat_Callback(hObject, eventdata, handles)
% hObject    handle to mutat (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 mutat as text
%        str2double(get(hObject,'String')) returns contents of mutat as a double
mutat=eval(get(handles.mutation, 'String'));
guidata(hObject, handles);

% --- Executes during object creation, after setting all properties.
function mutat_CreateFcn(hObject, eventdata, handles)
% hObject    handle to mutat (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

 


und die Exceldaten die geladen werden sollen, habe ich jetzt auch ohne die Listbox gemacht.

Code:


function auftraegeLaden_Callback(hObject, eventdata, handles)
% hObject    handle to auftraege (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 auftraege as text
%        str2double(get(hObject,'String')) returns contents of auftraege as a double

[Dateiname, Dateipfad]=uigetfile('*.xls','Waehle Aufträge.xls file:');
auftraege=xlsread(fullfile(Dateipfad, Dateiname),-1);

guidate(hObject,handles);

% --- Executes during object creation, after setting all properties.
function auftraege_CreateFcn(hObject, eventdata, handles)
% hObject    handle to auftraege (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

 


wie kriege ich das mit dem pushbuttom zusammen?

Code:


% --- Executes on button press in berechne.
function berechne_Callback(hObject, eventdata, handles)
% hObject    handle to berechne (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

result=meineFunktion(handles.mutat, handles.auftraege);
set(handles.berechne,'String',num2str(result));
guidata(hObject, handles);

 


das ist ein Auszug von meinem GUI Code. Also ich möchte die Eingabedaten einlesen, alle in meineFunktion übergeben und dann als Ergebnis zurückgeben.

Meine Daten die in den Exceldateien sind Matrizen und das Ergebnis ist ein Vektor, muss ich das nicht auch irgendwo eingeben?

Ich danke euch,
Nikki
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.09.2014, 11:46     Titel:
  Antworten mit Zitat      
Hier wäre ein Möglichkeit so fern ich den Aufbau deiner GUI überhaupt richtig verstanden habe, wie du xls in er Callback function einliest, abspeicherst und in einer anderen Function wieder lädst.

Code:

function mutat_Callback(hObject, eventdata, handles)
% hObject    handle to mutat (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 mutat as text
%        str2double(get(hObject,'String')) returns contents of mutat as a double
mutat=eval(get(handles.mutation, 'String'));
guidata(hObject, handles);

% ich verstehe hier den Grund für den eval nicht? Vorschlag...

handles.mutat = get(handles.mutation, 'String');

% save the changes to the structure to use it in other functions
guidata(gcbo,handles);
 




Code:

function auftraegeLaden_Callback(hObject, eventdata, handles)
% hObject    handle to auftraege (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 auftraege as text
%        str2double(get(hObject,'String')) returns contents of auftraege as a double

[Dateiname, Dateipfad]=uigetfile('*.xls','Waehle Aufträge.xls file:');
handles.auftraege=xlsread(fullfile(Dateipfad, Dateiname),-1);

% save the changes to the structure to use it in other functions
guidata(gcbo,handles);
 




Code:

% --- Executes on button press in berechne.
function berechne_Callback(hObject, eventdata, handles)
% hObject    handle to berechne (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% get the structure in the subfunction
handles = guidata(gcbo);

result=meineFunktion(handles.mutat, handles.auftraege);
set(handles.berechne,'String',num2str(result));
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2014, 12:20     Titel:
  Antworten mit Zitat      
hallo DSP,

eval hatte ich aus einem Besipiel. Was genau macht 'gcbo'?

Das Fester zum auswählen der exl Datei öffnet sich nicht und insgesamt kommt der folgende Fehler

Code:

Error using struct2handle
Error while evaluating uicontrol CreateFcn

Error using feval
Undefined function 'auftraegeLaden_CreateFcn' for input arguments of type 'double'.

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

Error in GUI_01 (line 44)
    gui_mainfcn(gui_State, varargin{:});

Error in
@(hObject,eventdata)GUI_01('auftraegeLaden_CreateFcn',hObject,eventdata,guidata(hObject))

 
Error using struct2handle
Error while evaluating uicontrol CreateFcn
 


der Code sieht jetzt so aus

Code:

function auftraegeLaden_Callback(hObject, eventdata, handles)
% hObject    handle to auftraege (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 auftraege as text
%        str2double(get(hObject,'String')) returns contents of auftraege as a double

[Dateiname, Dateipfad]=uigetfile('*.xls','Waehle Aufträge.xls file:');
auftraege=xlsread(fullfile(Dateipfad, Dateiname),-1);

% save the changes to the structure to use it in other functions
guidate(gcbo,handles);

% --- Executes during object creation, after setting all properties.
function auftraege_CreateFcn(hObject, eventdata, handles)
% hObject    handle to auftraege (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
 


müssen die Callback und die CreateFcn gleich heißen?

Nikki
Private Nachricht senden Benutzer-Profile anzeigen
 
DSP
Forum-Meister

Forum-Meister



Beiträge: 2.117
Anmeldedatum: 28.02.11
Wohnort: ---
Version: R2014b
     Beitrag Verfasst am: 21.09.2014, 12:35     Titel:
  Antworten mit Zitat      
Imho ist nur die Callback Funktion entscheidend. Aber bitte die anderen Funktionen, welche von GUIDE automatisch generiert worden sind deshalb nicht gleich löschen. Ich nehme mal sie wird aufgerufen, da in der GUI ein Button Namens "auftraegeLaden" gedrückt wurde.

Es muss schon heißen...

Code:

handles.auftraege =
 


Ansonsten ist auftraege eine lokale Variable, die nur innerhalb der Funktion bekannt ist. Daher wird sie mit in die handles Struktur integriert, gespeichert und kann dann in anderen Funktionen wieder aufgerufen werden.
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2014, 13:35     Titel:
  Antworten mit Zitat      
ok, aber warum wird das Fenster zur Auswahl der xls-Dateien nicht geöffnet?

Code:


function auftraegeLaden_Callback(hObject, eventdata, handles)
% hObject    handle to auftraege (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 auftraege as text
%        str2double(get(hObject,'String')) returns contents of auftraege as a double

[Dateiname, Dateipfad]=uigetfile('*.xls','Waehle Aufträge.xls file:');
auftraege=xlsread(fullfile(Dateipfad, Dateiname),-1);

% save the changes to the structure to use it in other functions
guidate(gcbo,handles);

% --- Executes during object creation, after setting all properties.
function auftraege_CreateFcn(hObject, eventdata, handles)
% hObject    handle to auftraege (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

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Nikki
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 26
Anmeldedatum: 15.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.09.2014, 13:46     Titel:
  Antworten mit Zitat      
Bei einer Listbox funktioniert es mit dem excel-Fenster Smile
aber es gibt trotzdem eine Fehlermeldung. Ich nehme an, weil es Matrizen sind. Welchen Befehl muss ich da benutzen?

Code:

% --- Executes on selection change in listbox.
function listbox_Callback(hObject, eventdata, handles)
% hObject    handle to listbox (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Hints: contents = cellstr(get(hObject,'String')) returns listbox contents as cell array
%        contents{get(hObject,'Value')} returns selected item from listbox
[Dateiname, Dateipfad]=uigetfile('*.xls','Waehle Aufträge.xls file:');
min=xlsread(fullfile(Dateipfad, Dateiname),-1);

guidate(gcbo,handles);

%guidata(hObject, handles);

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

% Hint: listbox 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 pushbutton.
function pushbutton_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
handles=guidata(gcbo, handles);

result=disp(handles.min);
set(handles.pushbutton,'String',num2str(result));
 


Code:

GUI_02
Warning: Interactive selection cannot be used in 'basic' mode.  First sheet will be
loaded.
> In xlsread at 205
  In GUI_02>listbox_Callback at 85
  In gui_mainfcn at 96
  In GUI_02 at 42
  In @(hObject,eventdata)GUI_02('listbox_Callback',hObject,eventdata,guidata(hObject))
Undefined function 'guidate' for input arguments of type 'struct'.

Error in GUI_02>listbox_Callback (line 87)
guidate(gcbo,handles);

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

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

Error in @(hObject,eventdata)GUI_02('listbox_Callback',hObject,eventdata,guidata(hObject))

 
Error while evaluating uicontrol Callback
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2, 3  Weiter

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.