ich bin neu im Programmieren mit Matlab und benötige ein schubser und etwas Hilfe.
Ich möchte eine GUI ohne guide Programmieren. Dabei habe ich anscheind noch nicht richtig verstanden, wie man aus Funktionen Daten an andere Funktionen übergibt.
Hier im Code starte ich eine GUI1mit 4 Editfeldern. Wenn man den Pushbutton bestätigt, öffnet sich eine neue GUI2 mit 4 Editfeldern und einem Pushbutton. Trägt man in ein beliebiges Feld (aus GUI2) etwas ein und drückt ENTER oder wählt ein anderes Feld aus, werden die Zeichen im Fenster 1 dargestellt. Leider aber in allen und nicht
GUI1 Feld 1 == GUI2 Feld1
GUI1 Feld 2 == GUI2 Feld2
GUI1 Feld 3 == GUI2 Feld3
GUI1 Feld 4 == GUI2 Feld4
Was mache ich falsch?
Ich verstehe nicht genau wie varargin{3} funktioniert. Warum 3? Keine andere Zahl geht... Kann man varargin umgehen ? Ich habe schon verstanden das Varargin ein Variable-length input argument list ist, aber anscheind nicht verstanden
Beim Callback übergebe ich G und dann geht nur bei der neuen Fkt [] = pb_call(varargin) ?? Wieso kann ich da nicht ein Variablennamen wie a vergeben??
pb = uicontrol('style','pushbutton',...
'units','pix',...
'position',[1030018030],...
'string','Push to Get Data',...
'callback',{@E_call,varargin{3}});
function[] = E_call(varargin) % Callback for secondary GUI editbox.
G = varargin{3}; % Get the structure. set(G.ed1,'string',get(gcbo,'string')) set(G.ed2,'string',get(gcbo,'string')) set(G.ed3,'string',get(gcbo,'string')) set(G.ed4,'string',get(gcbo,'string'))
%close(gcbf)% Close secondary GUI.
Trägt man in ein beliebiges Feld (aus GUI2) etwas ein und drückt ENTER oder wählt ein anderes Feld aus, werden die Zeichen im Fenster 1 dargestellt. Leider aber in allen und nicht
GUI1 Feld 1 == GUI2 Feld1
GUI1 Feld 2 == GUI2 Feld2
GUI1 Feld 3 == GUI2 Feld3
GUI1 Feld 4 == GUI2 Feld4
Was mache ich falsch?
Es wird bei Eingabe von Enter (aber auch bei Klick des Buttons pb in Figure 2) die Funktion E_call aufgerufen, in der jedes mal alle Strings der Edit-Boxen in GUI_24 geändert werden:
Code:
function[] = E_call(varargin) % Callback for secondary GUI editbox.
G = varargin{3}; % Get the structure. set(G.ed1,'string',get(gcbo,'string')) set(G.ed2,'string',get(gcbo,'string')) set(G.ed3,'string',get(gcbo,'string')) set(G.ed4,'string',get(gcbo,'string'))
%close(gcbf)% Close secondary GUI.
Du überschreibst hier alle vier Strings mit den Daten aus string in gcbo ('Handle of object whose callback is executing'; also das Edit-Feld, in dem Enter gedrückt wurde).
Du könntest für jede Edit-Box eine eigene Funktion E_call erzeugen, so dass nur das bearbeitete Feld in GUI_24 übertragen wird:
Code:
function[] = E1_call(varargin) % Callback for secondary GUI editbox.
G = varargin{3}; % Get the structure. set(G.ed1,'string',get(gcbo,'string'))
function[] = E2_call(varargin) % Callback for secondary GUI editbox.
G = varargin{3}; % Get the structure. set(G.ed2,'string',get(gcbo,'string'))
In pb_call musst du dann entsprechend die Callbacks der Edit-Felder anpassen.
mat123lab2 hat Folgendes geschrieben:
Ich verstehe nicht genau wie varargin{3} funktioniert. Warum 3? Keine andere Zahl geht... Kann man varargin umgehen ? Ich habe schon verstanden das Varargin ein Variable-length input argument list ist, aber anscheind nicht verstanden
Beim Callback übergebe ich G und dann geht nur bei der neuen Fkt [] = pb_call(varargin) ?? Wieso kann ich da nicht ein Variablennamen wie a vergeben??
Zu varargin: http://de.mathworks.com/help/matlab.....?searchHighlight=varargin
Bei Verwendung von varargin kann man beliebig viele Parameter übergeben ohne diese explizit in der Parameterliste der Funktion auflisten zu müssen. Ein Anwendungsfall ist bspw, wenn man die Funktion mehrfach aufruft und dabei nicht jedes mal die gleiche Anzahl Parameter übergibt. In der aufgerufenen Funktion kann man dann bspw. die Anzahl der Parameter abfragen und abhängig davon ggf unterschiedliche Berechnungen in der Funktion ausführen.
Man kann alternativ auch die zu übergebenden Parameter benennen. In deinem Code bspw.
Code:
function[] = pb_call(a,b,g) % Callback for pushbutton.
G = g;
% ...
Wie groß varargin ist, hängt davon ab wieviele Parameter letztlich übergeben wurden. varargin(1) und varargin(2) enthalten Daten zum aufrufenden Objekt, varargin(3) enthält das übergebene G. Wenn man mehr Daten übergibt, wird varargin entsprechend größer.
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
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.