动态地向MATLAB GUI添加字段?

5

我正在使用GUIDE生成MATLAB GUI,但我希望在用户单击按钮时创建字段。是否有办法在回调函数中动态添加新的GUI对象?

2个回答

6
一种实现方法是在开始时创建GUI对象,但将它们的“可见性”属性设置为“关闭”。然后,当用户单击按钮时,您将“可见性”属性设置回“打开”。这样,您不会在GUI运行时创建新的GUI对象,只需更改哪些部分是可见或不可见。
编辑:如果您不知道需要多少个新的GUI对象直到运行时,那么您可以将新的GUI对象添加到句柄结构中(其中hFigure是指向GUI图形的句柄)。
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

当然,您还需要为新GUI对象编写回调函数(如果需要),该函数可能如下所示:

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

我在上面的代码中使用的有趣功能包括:GUIDATA(用于存储/检索GUI数据)和GCBF(获取当前执行回调函数对象的父图形句柄)。


问题是我不知道在运行时需要创建多少个。我可以通过更改创建的GUI句柄来实现吗?我正在尝试: p = uicontrols(figure, 'Style','pushbutton','String','test') set(handles.test = p)但这会给我带来错误。有其他方法吗? - victor
上面列出的set命令有问题。你想用它来实现什么? - MatlabDoug
好的,我正在尝试gnovice的编辑,但由于某种原因,在guide生成的回调函数中运行时,它最终会改变现有元素。我的代码: new_t = uicontrol(hObject,'Style','edit')然后我尝试:K>> get(new_t, 'Style')ans =pushbutton这很奇怪,因为set(handles.test,'Style','edit')最终会改变handles.pushbutton.Style。有任何想法吗? - victor
1
hObject是一个指向图形界面还是其他GUI对象的句柄?我有一种感觉hObject是指向一个按钮的句柄。尝试使用GCBF函数代替:new_t = uicontrol(gcbf,'Style','edit'); - gnovice

3
使用UICONTROL,您将能够添加“字段”(称为uicontrols或小部件)。
您需要指定样式以获取编辑框、按钮等。
您可能希望在GUIDE中已经有所有的小部件,然后根据需要更改可见性或启用属性。
您可以在此处找到我关于MATLAB GUI构建的视频教程: http://blogs.mathworks.com/videos/category/gui-or-guide/ 这应该涵盖了GUI构建中的许多相关主题。

我可以将创建的uicontrol对象添加到生成的handles中吗?类似于set(handles.test, uicontrol_element)这样的操作? - victor
当您创建UICONTROL时,请捕获句柄:handles.newWidget = uicontrol(.......) - MatlabDoug

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接