matlab gui初始化全局变量,MATLAB GUI 全局变量的定义和使用回调函数的更改

一个例子

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

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

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

全局变量的定义

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

在这个代码中找到functionMain_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

你可能感兴趣的:(matlab,gui初始化全局变量)