【发布时间】:2009-07-07 16:39:40
【问题描述】:
我正在使用 GUIDE 生成 MATLAB GUI,但我想在用户单击按钮时创建字段。有没有办法在回调中动态添加新的 GUI 对象?
【问题讨论】:
标签: user-interface matlab
我正在使用 GUIDE 生成 MATLAB GUI,但我想在用户单击按钮时创建字段。有没有办法在回调中动态添加新的 GUI 对象?
【问题讨论】:
标签: user-interface matlab
实现此目的的一种方法是在开始时创建 GUI 对象,但将它们的“可见性”属性设置为“关闭”。然后,当用户单击按钮时,您将“Visibility”属性设置回“on”。这样,您就不会在 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(获取当前正在执行回调的对象的父图形的句柄)。
【讨论】:
使用 UICONTROL,您将能够添加“字段”(称为 uicontrol 或小部件)。
您需要指定样式以获取编辑框、按钮等...
您实际上可能希望 GUIDE 中已经存在所有小部件,然后根据需要更改 visibility 或 enabled 属性。
您可以在此处找到我在 MATLAB 中构建 GUI 的视频教程: http://blogs.mathworks.com/videos/category/gui-or-guide/
这应该涵盖这个和 GUI 构建中的许多相关主题。
【讨论】: