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

Funktionspfad im Callback

 

GUINewbie_2

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2015, 09:34     Titel: Funktionspfad im Callback
  Antworten mit Zitat      
Moin Moin,
ich arbeite mich gerade in die GUI Programmierung ohne Guide ein und habe da gleich mal zwei Fragen, die ich mithilfe von google leider nicht gelöst bekommen habe.
Ich definiere mir ein Pushbutton:

Code:

button = uicontrol('style','pushbutton',...
                    'string','Update Color',...
                    'units', 'normalized',...
                    'position',[0.3 0 0.4 0.2],...
                    'callback',{@my_fun, a, b});
 

bei dessen Betätigung die die Funktion 'my_fun' ausgeführt wird. Nun würde ich diese Funktion gerne in einen Unterordner verschieben, weiß aber nicht wie. Kann mir da eventuell jemand helfen?

Meine zweite Frage wäre: Ist es bei GUIs möglich, dass ich mehrere Funktionen in ein m-File schreibe? Also z.B. die Programmierung von 2 Buttons? Falls ja, wie würde ich die dann aufrufen?

Danke schonmal!


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 22.09.2015, 11:40     Titel: Re: Funktionspfad im Callback
  Antworten mit Zitat      
Hallo GUINewbie_2,

Zitat:
Nun würde ich diese Funktion gerne in einen Unterordner verschieben, weiß aber nicht wie.

Nun, erstelle im Datei-Browser (Unter Windows dem Explorer) einen Unterordner und schiebe die Datei mit der Maus dort hinein. Das kommt mir allerdings trivial vor. Darum verstehe ich Deine Frage vielleicht nicht.

Geht es darum, wie Matlab diese Funktion dann auch findet? Dazu muss der neu erstellte Order in den path eingefügt werden. Siehe addpath und pathtool .

Code:

button = uicontrol('style','pushbutton',...
                    'string','Update Color',...
                    'units', 'normalized',...
                    'position',[0.3 0 0.4 0.2],...
                    'callback',{@my_fun, a, b});
 

bei dessen Betätigung die die Funktion 'my_fun' ausgeführt wird. Nun würde ich diese Funktion gerne in einen Unterordner verschieben, weiß aber nicht wie. Kann mir da eventuell jemand helfen?

Zitat:
Meine zweite Frage wäre: Ist es bei GUIs möglich, dass ich mehrere Funktionen in ein m-File schreibe?

Man kann bei GUIs genau wie bei allen anderen Funktionen auch, in ein M-File eine Hauptfunktion schreiben und mehrere Unterfunktionen. Die Hauptfunktion hat dabei immer den selben Namen wie das File. Entweder hängst Du also alle Callback-Funktionen an das File an, dass die Haupt-Funktion erhält. Oder Du verwendest einen "Wrapper": Der Callback für 2 verschiedene Buttons enthält dann einen Parameter, der festlegt, welche Funktion aufgerufen werden soll:
Code:
function GUI
figure;
button1 = uicontrol('style','pushbutton',...
                    'string', 'Button1',...
                    'units', 'normalized',...
                    'position',[0.3 0 0.4 0.2],...
                    'callback',{@my_fun, a, b, 'button1'});
button2 = uicontrol('style','pushbutton',...
                    'string', 'Button1',...
                    'units', 'normalized',...
                    'position',[0.3 0.3 0.4 0.2],...
                    'callback',{@my_fun, a, b, 'button2'});
 

Und das File mit den Callbacks:
Code:
function my_fun(ObjectH, EventData, a, b, Caller)
if strcmp(Caller, 'button1')
  ...
elseif strcmp(Caller, 'button2')
  ...
else  % Catch programming errors:
  error('Unknown Caller: %s', Caller);
end

Also eigentlich ganz einfach, wenn man die Idee kennt.

Dann gibt es noch die Methode, die Function-Handles dynamisch zu erstellen:
Code:
function GUI
figure;
Callbacks = my_fun();

button1 = uicontrol('style','pushbutton',...
                    'string', 'Button1',...
                    'units', 'normalized',...
                    'position',[0.3 0 0.4 0.2],...
                    'callback', {Callbacks.button1, a, b});
button2 = uicontrol('style','pushbutton',...
                    'string', 'Button1',...
                    'units', 'normalized',...
                    'position',[0.3 0.3 0.4 0.2],...
                    'callback',{Callbacks.button1, a, b});
 

Und dann die Funktion, die die callbacks enthält:
Code:
function Callbacks = my_fun()
% Erzeuge nur die Handles zu den Funktionen:
Callbacks.button1 = @button1Callback;
Callbacks.button2 = @button2Callback;

% Und nun die eigentlichen Funktionen:
function button1Callback(ObjectH, EventData, a, b)
...

function button2Callback(ObjectH, EventData, a, b)
...
 

Welche der beiden Methoden praktischer ist, hängt vom einzelnen Problem ab, z.B. auch, ob das Programm in Zukunft of erweitert wird, eventuell von verschiedenen Programmierern, usw.

Gruß, Jan
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.