Ist es möglich Objekte (Eingabefelder, Beschriftungen) einer GUI in Abhängigkeit von einer Parameteranzahl dynamisch zu erstellen?
Das Grundgerüst der GUI habe ich mit GUIDE erstellt, im angehängten Beispiel mal fest für 4 Parameter. Die GUI wird mit einem Table aufgerufen und jeder Eintrag entspricht einem Parameter, der jeweils 2 Eingabefelder und ein Textfeld erhalten soll. Mein aktueller Ansatz sieht vor, die GUI schon komplett manuell bis zur maximalen Parameteranzahl zu erstellen und dann einfach nur die Größe der GUI anzupassen. Aber so richtig sauber erscheint mir das nicht.
wenn eine Maximalanzahl bekannt ist, kannst du die Elemente teilweise unsichtbar machen und ihre Position anpassen, um den gewünschten Effekt zu erreichen.
Alternative wäre, die variable Anzahl Elemente durch
uicontrol
-Befehle zu erstellen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Danke Harald. Ja Parameteranzahl ist bekannt beim Aufruf der GUI. Habe wie vorgeschlagen die Elemente mit dem
uicontrol
-Befehl in der Opening-Function erstellt. GUI funktioniert einwandfrei, folgend der relevante Teil des Quellcodes für die Nachwelt.
Code:
% --- Executes just before CanCmdInterface_evo2020 is made visible. function CanCmdInterface_evo2020_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to CanCmdInterface_evo2020 (see VARARGIN)
% Choose default command line output for CanCmdInterface_evo2020
handles.output = hObject;
% extract parameters if ~isempty(varargin) && istable(varargin{1})
handles.CanCmdParameters = varargin{1};
handles.nPar = min(20,size(handles.CanCmdParameters,1)); %limit to 20 parameters
else fprintf(2,'No parameter table specified / handed over to CanCmdInterface!\n') end
% check for correct format of table try (...) catch
f = warndlg('Parameter table has not the expected format. Continuation may result in faulty behaviour!','Missing parameter information','modal');
uiwait(f) end
% set GUI height depending on number of parameters & add elements try
gHeight = 2.3*handles.nPar + 7.5; % 5.3 offset for space below + 2 for space above
hObject.set('Position',[135.80001073 gHeight]) % add GUI elements for k = 1:handles.nPar
partext = handles.CanCmdParameters.varName{k};
parpos = 5.4 + 2.3*k;
handles.ebox2ECU(k) = uicontrol('Style', 'edit','Enable','off',...
'Units','characters','Position',[1.6 parpos 101.7],'Value',k,...
'Callback', @(hObject,eventdata)CanCmdInterface_evo2020('ebox2ECU_Callback',hObject,eventdata,guidata(hObject)));
handles.parText(k) = uicontrol('Style', 'text','String',partext,...
'Units','characters','Position',[11.6 parpos-0.2501.7]);
handles.eboxReadECU(k) = uicontrol('Style', 'edit','Enable','off',...
'Units','characters','Position',[61.6 parpos 101.7]);
end catch % do nothing, error text already provided above end
Anmerkung: Die Eingabefelder nutzen alle die selbe Callback-Funktion. Die Identifikation des Eingabefeldes habe ich nicht über das Tag gelöst, sondern über den Value -Wert.
Einstellungen und Berechtigungen
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.