2009-07-07 12 views
5

Ich erzeuge eine MATLAB GUI mit GUIDE, aber ich möchte Felder erstellen, wenn ein Benutzer auf eine Schaltfläche klickt. Gibt es eine Möglichkeit, neue GUI-Objekte in den Callbacks dynamisch hinzuzufügen?Felder dynamisch zur MATLAB GUI hinzufügen?

Antwort

6

Eine Möglichkeit, dies zu erreichen, besteht darin, die GUI-Objekte am Anfang zu erstellen, aber ihre Eigenschaft "Visibility" auf "off" zu setzen. Wenn der Benutzer dann auf eine Schaltfläche klickt, setzen Sie die Eigenschaft "Sichtbarkeit" wieder auf "on". Auf diese Weise werden Sie keine neuen GUI-Objekte erstellen, während die GUI läuft, Sie würden einfach ändern, welche Teile davon sichtbar sind oder nicht.

EDIT: Wenn Sie nicht wissen, wie viele neue GUI Objekte, die Sie bis zur Laufzeit benötigen, ist dies, wie Sie die neuen GUI-Objekte auf die Griffe Struktur hinzufügen würde (wo hFigure ist ein Handle auf die GUI Abbildung):

p = uicontrol(hFigure,'Style','pushbutton','String','test',... 
       'Callback',@p_Callback); % Including callback, if needed 
handles.test = p; % Add p to the "test" field of the handles structure 
guidata(hFigure,handles); % Add the new handles structure to the figure 

Sie würden dann natürlich haben die Callback-Funktion für das neue GUI-Objekt zu schreiben (wenn es eins) benötigt, die wie folgt aussehen könnte:

function p_Callback(hObject,eventdata) 
    handles = guidata(gcbf); % This gets the handles structure from the figure 
    ... 
    (make whatever computations/changes to GUI are needed) 
    ... 
    guidata(gcbf,handles); % This is needed if the handles structure is modified 

Interessante Funktionen, die ich in dem obigen Code verwendet habe, sind: GUIDATA (zum Speichern/Abrufen von Daten für eine GUI) und GCBF (Handle der Elternfigur des Objekts, dessen Callback gerade ausgeführt wird).

+0

Das Problem ist, ich weiß nicht, wie viele ich ' Ich muss bis zur Laufzeit erstellen. Kann ich das tun, indem ich die erstellten Gui-Griffe verändere? Ich versuche zu tun: p = uicontrols (Abbildung, 'Stil', 'Drucktaste', 'String', 'Test') Set (handles.test = p) aber es gibt mir Fehler. Gibt es eine andere Art und Weise? – victor

+0

Der oben genannte Set-Befehl ist ein Problem. Was versuchst du damit zu erreichen? – MatlabDoug

+0

Okay, ich versuche gnovice's edit, und aus irgendeinem Grund, wenn ich das in einem Callback starte, das von guide generiert wird, wird ein existierendes Element geändert. Mein Code: new_t = uicontrol (hObject, 'Style', 'Bearbeiten') dann versuche ich: K >> erhalten (new_t, 'Style') ans = Taster Es ist seltsam, weil Set (handles.test, 'Style', 'edit') endet mit dem Ändern von handles.pushbutton.Style. Irgendwelche Ideen? – victor

3

Mit UICONTROL können Sie 'Felder' (sogenannte uicontrols oder Widgets) hinzufügen.

Sie wollen den Stil festlegen Editboxen zu erhalten, Knöpfe, etc ...

Vielleicht möchten Sie eigentlich schon da alle Widgets haben, in GUIDE und dann ändern Sie einfach den Sichtbarkeit oder aktiviert Eigenschaft nach Bedarf.

Sie können meine Video-Tutorials auf GUI-Gebäude in MATLAB finden Sie hier: http://blogs.mathworks.com/videos/category/gui-or-guide/

Dies diese und viele verwandte Themen in GUI Gebäude abdecken sollte.

+0

Kann ich das erstellte uicontrol-Objekt den Handles hinzufügen, die generiert werden? So etwas wie set (handles.test, uicontrol_element) – victor

+0

Wenn Sie die UICONTROL machen, erfassen Sie den Griff: handles.newWidget = uicontrol (.......) – MatlabDoug

Verwandte Themen