Callbacks

Bisher haben Sie gelernt aus welchen Elementen eine GUI besteht, und wie man diese erzeugen kann. Allerdings fehlt uns jetzt noch ein entscheidendes Element, um aus der bis jetzt noch statischen GUI eine interaktive Benutzeroberfläche zu generieren. Nötig sind dazu die sogenannten Callbacks.

Führt der User eine Aktion in einem Element aus (z.B. Mausklick), wird der Callback des Elementes aufgerufen. Wird also z.B. ein Button im Fenster gedrückt, so wird dessen Callback aufgerufen, der einen hinterlegten Befehl ausführt und so zum Beispiel einen Graphen plotten könnte.

Sehen wir uns einmal folgendes Beispiel an:

>> figureHandle = figure('name','MeineErsteGui',...
'position',[(1600/2)-125 (1200/2)-125 250 250],...
'numbertitle','off','MenuBar','none');
>> buttonHandle = uicontrol('Style','pushbutton','String',...
'Textschalter','Position',[75 100 100 50],...
'Tag','Button');

Erzeugt wird ein Fenster mit einem Button. Da diesem Button aber noch kein Callback zugewiesen ist, wird durchs Klicken auf den Button keine Reaktion ausgelöst. Das Zuweisen geschieht über die Property 'Callback'.

Da wir den Handle des Buttons kennen, können wir mit Hilfe der set - Methode, den Wert der Property Callback ändern, und somit dem Button einen Callback zuweisen.

>> set(buttonHandle,'Callback','why');

Wenn Sie nun den Button drücken, erscheint im Command Window bei jedem Drücken eine neue Textausgabe. Diese Ausgabe wird durch die in Matlab eingebaute Funktion why() bei jedem neuen Aufruf durch den Callback des Buttons erzeugt.

Was geschieht, wenn Sie den Wert der Property Callback auf 'sin(5)' ändern?

Wichtig: Um eine Callback - Funktion zu definieren, muss die Property Callback mit einem String des Namens der Funktion gesetzt werden. So kann für jedes Objekt ein eigener Callback geschrieben werden. Der Wert der Property Callback ist ein String, in dem Befehle stehen, ähnlich dem Command Window. Werden mehrere Befehle übergeben, werden diese der Reihe nach abgearbeitet.

 

Beispiel:>> set(buttonHandle,'Callback','clc, disp(''erste Zeile''), disp(''zweite Zeile'')');

Drückt man auf den Button, so wird zuerst das Command Window gereinigt, und danach die Zeilen 'erste Zeile' und 'zweite Zeile' geschrieben. Dabei muss beachtet werden, dass Daten vom Typ String hier mit zwei Anführungszeichen geschrieben werden müssen.

Im Beispiel haben wir dem Button den Callback nachträglich zugewiesen, natürlich kann man das auch schon bei der Erzeugung des Buttons erledigen:

>> buttonHandle = uicontrol('Style','pushbutton','String',...
'Textschalter','Position',[(250/2)-100 150 100 50],...
'Tag','Button','Callback','why');

Es gibt auch andere Callbacks als die Property Callback. Für diverse Situationen, wie z.B. das primäre Generieren eines Graphikobjektes, wurden in MatLab andere Callbacks definiert. Sollten Sie für Ihr Programm unterschiedliche Callbacks benötigen, können Sie diese in der MatLab-Hilfe nachschlagen und sich über deren Unterschiede informieren.