外卖网站建设文档,郑州做网站建设公司哪家好,公司图案设计,中山石岐网站建设在博文《Matlab#xff1a;学习GUI(一个简单的例子)》(介绍的方法是完全用代码来建立一个GUI#xff0c;实际上Matlab本身有一个设计GUI的交互系统——GUIDE#xff0c;用户可以使用该系统更方便的建立自己的GUI.本文将介绍使用GUIDE时常常遇到的几个问题。本文将通过一个简…在博文《Matlab学习GUI(一个简单的例子)》(介绍的方法是完全用代码来建立一个GUI实际上Matlab本身有一个设计GUI的交互系统——GUIDE用户可以使用该系统更方便的建立自己的GUI.本文将介绍使用GUIDE时常常遇到的几个问题。本文将通过一个简单的例子来说明问题读者朋友们可以边看边操作。在command line输入guide回车打开Layout Editor.建立一个空白的模板(Blank GUI)建立一个push button将“String”改为“Close”save并将文件名命名为test如下图save后Matlab会生成两个文件test.M和test.fig打开test.M如下functionvarargout test(varargin)% Begin initializationcode - DO NOT EDITgui_Singleton 1;gui_State struct(gui_Name, mfilename,...gui_Singleton, gui_Singleton,...gui_OpeningFcn, test_OpeningFcn,...gui_OutputFcn, test_OutputFcn,...gui_LayoutFcn, [] ,...gui_Callback, []);ifnargin ischar(varargin{1})gui_State.gui_Callback str2func(varargin{1});endifnargout[varargout{1:nargout}] gui_mainfcn(gui_State, varargin{:});elsegui_mainfcn(gui_State, varargin{:});end% End initialization code- DO NOT EDIT% --- Executes justbefore test is made visible.functiontest_OpeningFcn(hObject,eventdata, handles, varargin)handles.output hObject;guidata(hObject, handles);% --- Outputs from thisfunction are returned to the command line.functionvarargout test_OutputFcn(hObject,eventdata, handles)varargout{1} handles.output;% --- Executes on buttonpress in pushbutton1.functionpushbutton1_Callback(hObject,eventdata, handles)生成的M文件的结构主要由三个子函数构成_OpeningFcn这个函数是在GUI界面出现以前Matlab在后台运行的GUI设计者可以在这个函数内完成数据初始化设置、GUI的界面的控制和调整等工作。_OutputFcn函数是M文件最后运行的函数主要是为了输出运行结果。_Callback函数用于控制component的触发行为比如说用户按下界面的按钮后该按钮应该执行什么命令。我们这个例子设计的是按下“Close”按钮后GUI界面关闭因此需要在functionpushbutton1_Callback(hObject, eventdata, handles)后面加上delete(handles.figure1);下面我们开始借助这个简单的例子讲一讲新手在应用GUIDE时常见的三个问题问题一figure Name和figure tag弄混了。Figure Name指的是M文件和Fig文件的name即本例中的test. Tag指的是设计GUI界面时为每个component所指定的标签也是程序中唯一的可以识别component的名字GUI的面板也是一个component有自己的tag即本例中默认的figure1.弄混figure tag和figure name的例子如下错误代码functionpushbutton1_Callback(hObject, eventdata, handles)delete(handles.test);当运行错误代码时Matlab会提示找不到handles中的test变量因为handles只是存储component的句柄每个句柄是以tag来命名的??? Reference to non-existentfield test.Error in testpushbutton1_Callback at 81delete(handles.test);问题二uiwait在逻辑上与uiresume不配对。还是上面的例子如果再增加一个功能等用户按下“Close”按钮后在屏幕输出“OK”否则不输出。为实现该功能在test_OpeningFcn的guidata语句后增加% UIWAIT makes test waitfor user response (see UIRESUME)uiwait(handles.figure1);在test_OutputFcn的varargout{1}语句后添加delete(handles.figure1);将pushbutton1_Callback中的delete(handles.figure1)删除并添加disp(OK);uiresume(handles.figure1);运行后用户点击“Close”按钮一切正常。可是当用户不点击“Close”而是直接关闭窗口时程序提示OutputFcn输出错误出现该错误的原因是当用户直接关闭窗口时所有在内存中的变量都被清楚程序在执行到OutputFcn是已没有变量可以赋值给结构变量varargout{1}了。为了改正该错误需要添加_CloseRequestFcn函数% Executes when userattempts to close figure1.functionfigure1_CloseRequestFcn(hObject, eventdata, handles)% hObject handle to figure1 (see GCBO)% eventdata reserved - to be defined in a future versionof MATLAB% handles structure with handles and user data (seeGUIDATA)ifisequal(get(hObject,waitstatus),waiting)% TheGUI is still in UIWAIT, us UIRESUMEuiresume(hObject);else% TheGUI is no longer waiting, just close itdelete(hObject);end可是如果直接将上述代码复制到test.m文件中保存运行关闭窗口时同样会出现上述OutputFcn输出错误这个就涉及到下面第三个问题。问题三Layout Editor的设置和M文件不同步。为解决上述问题可打开figure1的Property Inspector,注意到CloseRequestFcn一栏显示的是closereq点击以下旁边的图片变为这说明两者已经同步此时可以放心的运行程序了。转载本文请联系原作者获取授权同时请注明本文来自刘磊科学网博客。收藏分享分享到: