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

Funktion über Button aufrufen

 

Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 16:57     Titel: Funktion über Button aufrufen
  Antworten mit Zitat      
Hallo liebe Forumgemeinde,

ich bin Matlabanfänger und brauche Hilfe Smile

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.

Danke für die Hilfe!


Knappe Franz
Forum-Anfänger

Forum-Anfänger


Beiträge: 24
Anmeldedatum: 07.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 17:33     Titel:
  Antworten mit Zitat      
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.

Code:

function pb1_Callback(..)
  Funktion(a1,b1);

function pb2_Callback(..)
  Funktion(a2,b2);

function Funktion(x,y)
  .
  .
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 18:14     Titel:
  Antworten mit Zitat      
Hm danke für die Antwort,

so habe ich das auch probiert, aber dann meckert matlab, dass er die Variablen nicht kennt.
Muss ich da nicht mit set oder get arbeiten?

Grüßle
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 08.08.2011, 18:57     Titel:
  Antworten mit Zitat      
Dazu gibt es mehrere Methoden:
- doc setappdata
- doc handles
- doc global
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 19:24     Titel:
  Antworten mit Zitat      
Ich dachte es sei ein leichtes mir zu helfen, aber so komme ich nicht weiter Sad
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 08.08.2011, 21:53     Titel:
  Antworten mit Zitat      
Hallo Ursl,

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 10:34     Titel:
  Antworten mit Zitat      
Also gut, dann werde ich mal konkreter Very Happy

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)

handles.output = hObject;

% Update handles structure
guidata(hObject, handles);
handles.h1 = 2;
handles.h2 = 3;


und in der callback Funktion:
Code:
function nut_Callback(hObject, eventdata, handles)
handles.h2 = str2double(get(handles.nut, 'String'));
guidata(hObject, handles);
meineFunktion(A,h1);
 


Wie greift man hier auf A zu?

Und führt er so die Funktion aus?

Grüßle
 
mawi
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 14.04.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 09.08.2011, 10:51     Titel:
  Antworten mit Zitat      
Hallo Ursl,

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 kannst dir auch mal
Code:

anschauen

Gruß mawi
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 11:43     Titel:
  Antworten mit Zitat      
mawi hat Folgendes 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.
Wie?
 
mawi
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 14.04.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 09.08.2011, 12:19     Titel:
  Antworten mit Zitat      
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);
 


Gruß mawi
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.08.2011, 14:55     Titel:
  Antworten mit Zitat      
Ok danke,

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?

Grüßle
 
mawi
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 14.04.11
Wohnort: Stuttgart
Version: ---
     Beitrag Verfasst am: 09.08.2011, 18:41     Titel:
  Antworten mit Zitat      
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

Gruß mawi
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 11:11     Titel:
  Antworten mit Zitat      
Genau das hatte ich versucht:

Code:

handles.A = eval(A);
 


Das ist aber wohl falsch Very Happy
 
BlackDread
Forum-Century

Forum-Century


Beiträge: 212
Anmeldedatum: 11.05.11
Wohnort: ---
Version: 2015a
     Beitrag Verfasst am: 10.08.2011, 13:04     Titel:
  Antworten mit Zitat      
Hallo Ursl,
mawi nannte:
Zitat:
evalin oder assignin


es besteht ein Unterschied zu eval Wink
doc evalin

Code:
handles.A = evalin('base',A);


Grüßle Chris
Private Nachricht senden Benutzer-Profile anzeigen
 
Ursl

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.08.2011, 13:33     Titel:
  Antworten mit Zitat      
Also wenn ich ich
Code:

handles.A = [1 2 3;3 2 1;4 3 2];
 
schreibe, funktioniert der Gui Code.

Wenn ich aber
Code:

handles.A = evalin('base',B)

oder
Code:

A= evalin('base',B);
handles.A = A;

schreibe nicht.

Wieso?
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  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 - 2025 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.