MATLAB GUI设计之如何在GUI界面中动态创建控件

目录

    • 一、功能介绍
    • 二、功能实现
      • 2.1 首先利用GUIDE生成程序的初始界面
      • 2.2 将新创建的控件句柄添加到程序句柄结构中
    • 三、代码示例
      • 3.1 首先创建如下的GUI界面
      • 3.2按钮的callback
    • 四、结果展示

一、功能介绍

由于有时利用MATLAB搭建GUI界面时,用户需要输入的数据个数是不确定的,这样就很难在界面上实现创建输入控件。这时,用户可能需要根据具体情况动态生成一些控件,如编辑控件等,来输入程序需要的各种参数。

二、功能实现

这种需要动态创建控件的方法最好结合GUIDE开发环境纯代码创建控件来实现。

2.1 首先利用GUIDE生成程序的初始界面

需要注意的是,界面上所有控件都放在一个Panel面板控件中。
为什么要这样做呢?
因为界面上所有控件的位置(Position)都是以figure的左下角为基准点确定的。当动态创建控件时,需要调整figure的大小来容纳新创建的控件,这样势必又引起已存在的控件在figure上位置的改变,所以必须所有控件的位置进行调整。如果控件是各自独立地放在figure上的,则需要对这些控件编程来调整位置,这样势必又会增加代码的复杂度。为了降低代码的复杂度,便于编程,实现吧所有控件放在一个面板上,当调整figure的大小时,只要调整面板在figure上的位置,则面板上控件的位置也将随机调整。

2.2 将新创建的控件句柄添加到程序句柄结构中

当在figure上创建了新的控件后,可以调用guihandles函数来重新生成与figure句柄相关联的句柄结构,并覆盖原先的handles结构。这样,新创建的控件的句柄就添加到程序的句柄结构中,就可以在其他控件的回调函数中对这些控件进行操作了。

三、代码示例

下面展示一个示例。
用GUIDE创建初始界面;程序运行时,单击“产生输入框”按钮就可以创建指定数目的可编辑文本控件。
代码流程如下:

3.1 首先创建如下的GUI界面

MATLAB GUI设计之如何在GUI界面中动态创建控件_第1张图片
(这里就不进行详细赘述了)

3.2按钮的callback

代码如下:

posFigure=get(handles.figure1,'position');%获得figure的位置
posPanel1=get(handles.uipanel1,'position');%取得panel1的位置
set(handles.figure1,'position',[posFigure(1) posFigure(2)/2 posFigure(3) posFigure(4)]);%调整figure的位置
set(handles.uipanel1,'position',[posPanel1(1) 0.5 posPanel1(3) posPanel1(4)/2]);%调整panel1的位置
%生成新的panel2
uipanel2=uipanel('parent',handles.figure1,'tag','uipanel2','position',[0.05 0.01 posPanel1(3) posPanel1(4)/2]);
row=str2double(get(handles.edit1,'string'));
column=str2double(get(handles.edit2,'string'));
for ii=1:row
    for jj=1:column
        uicontrol(uipanel2,'style','edit','tag',['edit',num2str(2+ii*jj)],...
            'units','normalized','position',[0.15+(ii-1)*0.4 0.1+(jj-1)*0.3 0.3 0.2],...
            'backgroundcolor',[0 1 0],'enable','on','string',num2str(ii*jj));
    end
end
%重新生成handles结构
handles=guihandles(handles.figure1);
guidata(hObject,handles);%更新handles结构

【注】: 为方便设置控件的position属性,建议把各控件的units属性都统一设置为normalized。

四、结果展示

原始界面如上图所示;
输入2,2后如下图:
MATLAB GUI设计之如何在GUI界面中动态创建控件_第2张图片

ok~任务完成!
由于比较匆忙,可能程序还有部分bug,欢迎大家评论留言,也欢迎大家在评论区补充。

详细代码可参考:https://download.csdn.net/download/didi_ya/18275517

参考:https://www.ilovematlab.cn/thread-63931-1-1.html

你可能感兴趣的:(MATLAB,matlab,gui,可视化)