MATLAB GUI 全局变量的定义和使用回调函数的更改

一个例子

 

在MATLAB GUI编程中,经常需要处理按钮回调函数之间的一些逻辑。比如,一个处理数据的界面,需要先通过按钮,选定数据文件、确定并导入一些数据到程序中,才能点击下一个按钮“查看数据”,而如果直接点击“查看数据”,那么程序需要提示“未导入数据”。

 

在这种情况下,除了可以使用判断存放数据变量是否为空、或者检验文件路径等方法,来判断是否确实导入了数据,也可以在按钮回调函数上关联全局变量——一些标记位Flag。

 

上面的例子中,设定“导入”标记位一开始为0,选定完数据之后,点击“导入数据”按钮、且成功导入的时候,将“导入”标记位置为1,而“查看数据”按钮有一个对于“导入”标记位的判断,如果为1,才能继续进行操作。

 

全局变量的定义

 

在MATLAB命令行输入“guide”,点击,新建一个空白的GUI并保存,在MATLAB 2016a版本下,该空白的界面对应的代码应当为74行左右。

在这个代码中找到function Main_OpeningFcn(hObject, eventdata, handles, varargin)这个函数,这里就是定义GUI全局变量的位置。(蓝色部分,与该GUI的命名有关,只需要记住,这个函数的名字叫OpeningFcn,即打开界面就会执行的函数)

在该函数的最后,定义全局变量,语法规则如下:

global 变量1 变量2 变量3 ...... 变量n;    #使用关键字global声明,且变量中间没有逗号

变量1 = 1;
变量2 = 2;
......
变量n = n;    #变量的赋值,有分号

举一个例子:

function Main_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 Main (see VARARGIN)

% Choose default command line output for Main
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Main wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Main_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;

% 最后这三个Flag,是全局变量

global Flag_trainimport Flag_testimport Flag_train;
        Flag_trainimport=0;
        Flag_testimport=0;
        Flag_train=0;

这样,就实现了在进入GUI界面的时候,就已经初始化好了几个全局变量。

如果定义的全局变量,在整个GUI界面的程序执行流程中,都是有可能用到的,那么强烈建议按照这个例子,写在Opening Fcn下,不要再新建函数了,很容易出错。

 

使用按钮的回调函数更改全局变量

 

当拖动GUI组件(比如一个按钮)放到界面上并保存以后,程序中会生成对应的回调函数代码。在这些回调函数中,可以更改之前定义的GUI全局变量。

语法规则如下:

global 全局变量1 全局变量2 ...... 全局变量n;    #中间没有逗号

全局变量1 = 新的数值;

......

在使用全局变量的函数中,使用到的变量必须在该函数中使用global重新定义一遍。当然,在该函数中,未使用到的全局变量可以不用定义。定义之后,使用赋值语句就可以更改它的值。

使用上面的例子,我们对于上面代码中定义的三个Flag进行修改:

% --- Executes on button press in Yes1.

function Yes1_Callback(hObject, eventdata, handles)
    global Flag_trainimport;
    filename1=get(handles.import_train,'String');
    if(strcmp(filename1,'等待导入数据...'))
        Flag_trainimport=0;
        msgbox('未选择文件或无效的类型');
    else
        Flag_trainimport=1;
        set(handles.msg,'String','成功导入训练数据');
    end

我们可以看到,对于该回调函数使用到的全局变量Flag_trainimport,需要再一次声明,之后再if-else从句中,完成了对于其值的更改。

 

参考资料

https://www.ilovematlab.cn/thread-456538-1-1.html

  • 27
    点赞
  • 108
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值