Verfasst am: 08.08.2011, 16:57
Titel: Funktion über Button aufrufen
Hallo liebe Forumgemeinde,
ich bin Matlabanfänger und brauche Hilfe
Ich habe 2 Buttons erstellt. Jetzt will ich über beide Buttons dieselbe Funktion aufrufen, aber mit unterschiedlichen Eingabewerten. Wie mache ich sowas?
Bsp: Button 1 gedrückt -> Funktion(a1,b1) wird ausgeführt.
Button 2 gedrückt -> Funktion(a2,b2) wird ausgeführt.
Du könntest z.B. deine Funktion(x,y) implementieren und aus den Callback-Funktionen der beiden Buttons rufst du dann deine Funktion mit deinen gewünschten Parametern auf.
Es wäre auf jeden Fall leichter Dir zu helfen, wenn Du eine konkrete Frage stellst.
"Button 1 gedrückt -> Funktion(a1,b1) wird ausgeführt" wurde eigentlich hinreichend beantwortet. Nun hast Du aber ganz andere Schwierigkeiten, nämlich dass Du die Weitergabe von Variablen nicht gelöst hast. Dazu gibt es zum Glück hier im Forum hunderte Threads, nach denen Du suchen kannst.
Viel Erfolg, Jan
Ursl
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 09.08.2011, 10:34
Titel:
Also gut, dann werde ich mal konkreter
Als erstes lade ich mir eine mxn Matrix A
die Funktion, die ich über die Buttons zugreifen will ist ein bereits erstelltes .m File - > meineFunktion(A,h)
Jetzt habe ich h in der GUI Funktion definiert:
Code:
function GuiButtons_OpeningFcn(hObject, eventdata, handles, varargin)
ich versteh deine Frage zwar nicht ganz, versuch dir jetzt aber trotzdem mal zu helfen^^
Du definiert in der OpeningFcn handles.h1 und handles.h2 nachdem zu handles an guidata übergibst, das macht schonmal nicht wirklich Sinn, das gehört in 99% der Fälle davor.
Die nut_Callback ist ein edit-Element aus dem du eine Zahl ausliest die du dann an handles.h2 übergibst, wieso definierst du sie dann zuvor in der OpeningFcn?
woher kommt die Variable (Matrix) A?
wenn diese in mehreren Funktionen (Button_Callback) zur Verfügung stehen soll würde ich diese auch an die handles struktur übergeben.
Wie du dann meineFUnktion aufrufen kannst hat Knappe Franz ja schon geschrieben.
Du definiert in der OpeningFcn handles.h1 und handles.h2 nachdem zu handles an guidata übergibst, das macht schonmal nicht wirklich Sinn, das gehört in 99% der Fälle davor.
Das habe ich aus dem Forum.
mawi hat Folgendes geschrieben:
Die nut_Callback ist ein edit-Element aus dem du eine Zahl ausliest die du dann an handles.h2 übergibst, wieso definierst du sie dann zuvor in der OpeningFcn?
Die Funktion kann doch sonst nirgens h bzw. h2 auslesen.
mawi hat Folgendes geschrieben:
woher kommt die Variable (Matrix) A?
Matrix A lade ich von einer ASCII Datei
mawi hat Folgendes geschrieben:
wenn diese in mehreren Funktionen (Button_Callback) zur Verfügung stehen soll würde ich diese auch an die handles struktur übergeben.
Ich verstehe das allgemein also so das du h1 und h2 von Hand in der GUI eingeben willst. Dann willst du je nach Button entweder meineFunction mit A und hi oder mit A und h2 starten:
Ich versuche mal das von dem ich glaube was du machen willst als Pseudocode darzustellen.
Code:
function GuiButtons_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% Einlesen von Matrix A
handles.A = ?;
% Oder du könntest A ja auch innerhalb einer weiteren button-function % einlesen. % Update handles structure guidata(hObject, handles);
function edith1_Callback(hObject, eventdata, handles)
handles.h1 = str2double(get(hObject,'String'));
guidata(hObject,handles);
function edith2_Callback(hObject, eventdata, handles)
handles.h2 = str2double(get(hObject,'String'));
guidata(hObject,handles);
function button1_Callback(hObject, eventdata, handles)
result = meineFunktion(handles.A,handles.h1);
function button2_Callback(hObject, eventdata, handles)
result = meineFunktion(handles.A,handles.h2);
das alles soweit geklappt. Jetzt habe ich nur noch das Problem, dass ich nicht auf Matrix A im Workspace zugeifen kann. Was für einen Befehl benutze ich da?
Welchen workspace meinst du? In den funktiosworkspaces hast
du A ja drin, bzw handels.A
Wenn du sie im Base workspace braucht könntest du mit
evalin oder assignin arbeiten
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
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.