Eine GUI erzeugen: uicontrol

Die Syntax fast aller GUI - Funktionen zum Erzeugen von Objekten (zum Beispiel: figure(), uicontrol(), uimenu()) funktioniert nach dem Schema:
>> neuerHandle = Funktionsname('Propertyart1','Propertywert1', 'Propertyart2',...
'Propertywert2', 'Propertyart3','Propertywert3');
Die Rückgabe "neuerHandle" ist immer ein Handle, der dem erzeugten Objekt zugeordnet ist.

Beispiel: >> figureHandle = figure('name','MeineErsteGui',...
'position',[(1024/2)-125 (768/2)-125 250 250],...
'numbertitle','off','MenuBar','none');

Selbstverständlich können Sie auch die Figure, in der die GUI erzeugt wird vorher in ihren Eigenschaften festlegen. Der Name wird mit der Property 'name' festgelegt. 'Numbertitle' wird als off festgelegt, damit vor dem GUI - Titel nicht Figure1: steht.

Sie sehen sofort, dass die Festlegung der Properties über mehrere Zeilen gehen muss - selbst in diesem einfachen Beispiel. Matlab erkennt ... und liest den Code, als ob die folgende Zeile zur aktuellen Zeile dazugehört.

Uicontrol()

Allgemein versucht man in Grafical User Interfaces den Endnutzer nicht allzu sehr zu verwirren. Deshalb verwendet man in MatLab die gleichen Schalter und Symbole wie in Internet - Anwendungen.

Aussehen und Funktion dieser Steuerelemente werden im Folgenden auch als Styles bezeichnet:


Style Beschreibung
Check Box checkbox Auswählbarer Status einer Option
Editable Text edit Durch den Benutzer editierbarer Text
Frame frame Vereinigt zusammengehörende Elemente in einer Box/Rahmen
Pop-up Menu popupmenu Auswahlmenü mit verschiedenen Optionen
List Box listbox Wie Frame nur mit einer Scrollbar
Push Button pushbutton Klicken ruft ein Event hervor
Radio Button radiobutton
Auswahl ändert den Status einer Option. I.A. sind Radio Buttons gruppiert.
Toggle Button
togglebutton Es existiert nur der Zustand ein und aus
Slider slider Repräsentiert eine größere Anzahl von Optionen
Static Text text Zeigt unveränderbaren Text in einer Box

 

Damit sie sich die Elemente besser vorstellen können, werfen Sie einen Blick auf die Abbildung GUI-Elemente. Es ist notwendig, sich die entsprechenden Begriffe im Hinterkopf zu behalten. Bei Bedarf können Sie aber in der MatLab - Hilfe abgerufen werden (doc uicontrol).

 

In Matlab können Sie diese Elemente mit der Funktion uicontrol() erstellen. Dazu müssen Sie ein neues uicontrol - Objekt erzeugen, und ihm den entsprechenden Style als Property zuweisen.

Wollen Sie z.B. einen Button erzeugen, würde theoretisch folgender Befehl ausreichen:

>> buttonHandle = uicontrol('Style','pushbutton');
Bei der Erzeugung eines uicontrol - Objekts können aber noch mehr Properties, wie zum Beispiel die Position des Elements, festgelegt werden. Betrachten Sie dazu das folgende Beispiel (siehe auch Abbildung Meine erste GUI):

>> editHandle = uicontrol('Style','edit','String',...
'Hallo Welt!','Position',[(250/2)-100 50 100 100],...
'Tag','Edit');

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

Die kryptischen Positionsinformationen ergeben sich aus einer Bildschirmauflösung von 1600 mal 1200 Bildpunkten. Ist Ihnen die Auflösung nicht bekannt, kann mit get(0,'ScreenSize') (0 für das root - Objekt) die Bildschirmauflösung bestimmt werden. Der Mittelpunkt des Bildschirms ist logischerweise die Hälfte dieser Werte. Leider kann mit der Einheit pixel nur absolut positioniert werden. Soll relativ positioniert werden, dann muss die Property Units auf normalized umgestellt werden.

Um Ihre GUI übersichtlich zu gestalten, sollten Sie sich zu Anfang im Klaren sein, wie Ihre GUI aussehen soll. Fertigen Sie dazu eine Zeichnung mit den entsprechenden Elementen an. Das könnte so aussehen wie in der Abbildung GUI-Design.


Soll das neue Objekt in ein bestehendes Objekt eingebunden werden, muss der Handle des parent übergeben werden:
>> neuerHandle = Funktionsname(parentHandle,'Propertyart1', 'Propertywert1',...
'Propertyart2','Propertywertt2',..

Sollen z.B. in verschiedenen Figures GUI - Elemente erzeugt werden, so können diese durch die Handles dieser Parent-Figures unterschieden werden. Man schreibt, wie gewohnt den Handle vor die Properties und trennt durch ein Komma:

>> editHandle = uicontrol(figureHandle, ...)