网易首页 > 网易号 > 正文 申请入驻

Matlab GUI理念与函数文件

0
分享至

GUI开发时,一般采用‘一前一后’双线制模式。所谓“一前”,即所见所得的这种界面布置,属于前端设计,用户通过鼠标拖拽控件,放置到预设的位置,调整好各个控件的大小即可。所谓“一后”,即指对各控件的操作、处置等引发的功能的具体实现,包括回调函数的定义等,属于后端设计。前端设计的是图像界面,保存成扩展名为fig的图形文件,后端设计的是函数,保存成扩展名为m的MATLAB文件。一前一后看似两个不同的层面,实际上是统一在一起的一个有机整体。

例如,将一个按钮拖到GUI的布局区域,用户可以使用鼠标对其大小、位置等各种属性进行所见所得的设计,双击该按钮,则会打开它的属性访问表,在属性表里,可以对它进行各种设置,比如背景设置、单位设置、标题、字体等各种属性的设置。假如我们想将这个按钮标题修改为“创建文件写入文字”,找到String选项,将文字进行修改,键入回车能立刻看到修改的效果,这里还将按钮的背景改为鲜艳的红色(如下图)。

设置完成后,若对设计布局满意,则可以将它保存到文件中,比如保存为MyButton.fig;一旦保存,MATLAB就会生成与这前端图形界面对应的后端函数文件,这些文件包括:

• function varargout = MyButton(varargin)

• function MyButton_OpeningFcn(hObject, eventdata, handles, varargin)

• function varargout = MyButton_OutputFcn(hObject, eventdata, handles)• function pushbutton1_Callback(hObject, eventdata, handles)

这四个函数文件是MATLAB自动生成的基本框架文件,它能支撑我们刚刚设计的GUI程序的运行,例如,用户点击工具栏中的绿色右向三角形,会生成我们设计的GUI,但只有一个按钮。并且可以被按下与弹起,但什么也做不了。

实际上,在MTALAB中,每个GUI编辑器产生的函数文件,都会包含这四个文件,其中和保存文件名称相同的函数称为主函数,如这里的MyButton函数。第二个是和界面启动相关的启动子函数,一般来讲,启动子函数是完整但不完善的函数,说它完整,是指从语法的角度看,它的确支持运行,没有任何语法问题;说它不完善,是指从功能的角度看,它并未完成什么功能,它要求GUI设计人员根据任务填入必要的代码。启动子函数在GUI所有组件建立之后,但在将这些组件显示到屏幕之前运行,主要用来为GUI的使用做好数据和界面的准备工作。该函数命名的规则是:主文件名_OpeningFcn(hObject, eventdata, handles, varargin)。第三个是输出子函数,该函数命名的规则是:主文件名_OutputFcn(hObject, eventdata, handles)。第四个是回调子函数,打开代码段,常常具有如下的格式:

function pushbutton1_Callback(hObject, eventdata, handles)

% hObject handle to pushbutton1 (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

其中,回调函数的名称为pushbuttonX_Callback。pushbutton即英文书写的按钮。MATLAB在创建控件的回调函数时,通常以控件名称英文名称回调函数的开始,之后紧跟着数字X,表示该类控件建立的先后顺序,具体到本例,pushbutton1是指建立了按钮控件,且编号为1,之后以下拉线连接固定的回调函数名称与输入参数列表。回调函数定义具体格式如下图所示。

用户也可以不使用默认的pushbuttonX而改为更有意义且易辨认的名称,这可通过修改该按钮的Tag属性实现,比如可以修改为File,则在保存时,会创建以File_Callback为函数名的回调函数。回调函数默认带有3个输入参数:第一输入参数hObject为本按钮的句柄;第二个输入参数eventdata是保留关键字,留给未来版本的MATLAB使用;第三个输入参数handles是一个结构变量,它保存着界面组件的所有句柄与用户数据,属于GUI数据变量。

整个函数除了第一行外,函数体全部为空,因为我们只是将按钮控件拖放到设计区,还未曾给它设定任务,自然只能是一个“什么也不干”的空回调函数。按习惯,需要将按钮的功能标示在按钮上,这可通过属性编辑进行修改。例如,我们希望这个按钮按下去后,会在后台创建一个文件并写入文字,则可将这个按钮的标题修改为“创建文件写入文字”,具体的修改效果已在下图中展示出来。

再回到回调函数。现在给回调函数添加一些代码,设定按钮按下后,将建立一个名为TestButton的文本文件,并在文件中写入一句话,则可以输入如下的代码:

fid= fopen('TestButton.txt','w');

fprintf(fid,'%s','This file is made by push button at ');

timeStamp =datestr(now ,31 );

fprintf(fid,'%s\n',timeStamp);

fclose(fid);

保存后,运行该GUI(工具栏中的绿色右向三角形),生成的GUI如下图所示;点击该按钮,则在该GUI工作路径下,可找到生成的文件。

按下按钮,实际上是发生了一个事件,对该事件的响应,或者说对该事件如何处置,回调函数则给予了回答。这实际上是面向对象编程的处理方式,用户只需记住按下按钮相当于调用了回调函数。在回调函数中,用户可以设定各种功能。比如,我们可设定打开Windows系统下的有道词典,假如Windows桌面上有有道词典的快捷方式,则可以通过查询该软件的属性(如下图),将“属性”界面下的“目标”内容作为系统命令,传递给MATLAB的系统函数system:

system('C:\Users\MAZHAIPU\AppData\Local\Youdao\Dict\Application\YodaoDict.exe')

则按下按钮时,会打开有道词典。

此时,完整的回调函数如下:

function File_Callback(hObject, eventdata, handles)

% hObject handle to File (see GCBO)

% eventdata reserved - to be defined in a future version of MATLAB

% handles structure with handles and user data (see GUIDATA)

fid= fopen('TestButton.txt','w');

fprintf(fid,'%s','This file is made by push button at ');

timeStamp =datestr(now ,31 );

fprintf(fid,'%s\n',timeStamp);

fclose(fid);

system('C:\Users\MAZHAIPU\AppData\Local\Youdao\Dict\Application\YodaoDict.exe')

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
鲍尔默彻底怒了!不仅仅因为1分惜败开拓者,更是因为以下三点!

鲍尔默彻底怒了!不仅仅因为1分惜败开拓者,更是因为以下三点!

田先生篮球
2024-10-31 14:47:48
东京这一天,62岁何超琼用丰腴玉润的身材,给白幼瘦女星上了一课

东京这一天,62岁何超琼用丰腴玉润的身材,给白幼瘦女星上了一课

南城无双
2024-10-31 14:25:19
“整页简历就照片能看”女生另类简历走红,网友:给HR做屏保吗?

“整页简历就照片能看”女生另类简历走红,网友:给HR做屏保吗?

妍妍教育日记
2024-10-31 16:46:29
男子吃饭不给钱还自称“拘留所的”?黑龙江肇东回应:确系民辅警,开玩笑产生误会后当场付款

男子吃饭不给钱还自称“拘留所的”?黑龙江肇东回应:确系民辅警,开玩笑产生误会后当场付款

极目新闻
2024-10-31 06:31:24
浙江一大学女老师出轨学生!女老师照片被扒很漂亮,学校发布通报

浙江一大学女老师出轨学生!女老师照片被扒很漂亮,学校发布通报

鋭娱之乐
2024-10-28 17:18:48
上汽利润暴跌,长安利润暴跌,广汽利润暴跌,中国合资车遭受重创

上汽利润暴跌,长安利润暴跌,广汽利润暴跌,中国合资车遭受重创

克莱恩财经
2024-10-31 22:38:47
残酷社会现状:数十亿人无法逃离的内卷死循环

残酷社会现状:数十亿人无法逃离的内卷死循环

娱乐圈见解说
2024-10-28 07:35:13
马斯克建豪华“后宫社区”,11娃3个妈拎包入住?梦想几房互助育儿,还在公司继续“选妃捐精”?

马斯克建豪华“后宫社区”,11娃3个妈拎包入住?梦想几房互助育儿,还在公司继续“选妃捐精”?

英国报姐
2024-10-31 21:30:09
忙于大选的美国,对日本逐渐失去掌控,石破茂让美日同盟陷入危机

忙于大选的美国,对日本逐渐失去掌控,石破茂让美日同盟陷入危机

康浔说
2024-11-01 07:00:03
MCU团队被整体解散!

MCU团队被整体解散!

EETOP半导体社区
2024-10-31 11:53:03
老A8也是A8,虽然费油但更有女人味哦

老A8也是A8,虽然费油但更有女人味哦

娱乐圈人物大赏
2024-11-01 00:25:02
阿斯利康中国总裁王磊被带走“配合调查”:是业内传奇人物,原因或涉走私

阿斯利康中国总裁王磊被带走“配合调查”:是业内传奇人物,原因或涉走私

界面新闻
2024-10-31 12:58:33
5+2+2+1!全场都炸了!布朗尼!

5+2+2+1!全场都炸了!布朗尼!

左右为篮
2024-10-31 13:15:53
白俄司令透露,中国正疯狂吸取俄乌战争经验,为一件大事做准备?

白俄司令透露,中国正疯狂吸取俄乌战争经验,为一件大事做准备?

胡麒牧博士
2024-10-29 17:12:37
比亚迪放大招,全固态电池曝光,纯电续航有望达到1000公里

比亚迪放大招,全固态电池曝光,纯电续航有望达到1000公里

沙雕小琳琳
2024-11-01 01:10:14
涉故意伤害罪等,刘翔峰一审获刑17年

涉故意伤害罪等,刘翔峰一审获刑17年

齐鲁壹点
2024-10-31 12:20:16
证据确凿!汪小菲晒判决书锤爆大S,娱乐圈“杀猪盘”惊人内幕!

证据确凿!汪小菲晒判决书锤爆大S,娱乐圈“杀猪盘”惊人内幕!

飞花文史
2024-10-31 16:46:36
哈马斯复仇开始,斩首行动成功!伊朗火力全开,以色列大难临头!

哈马斯复仇开始,斩首行动成功!伊朗火力全开,以色列大难临头!

阿凫爱吐槽
2024-10-22 14:17:41
樊振东不在,外协太强了?真实原因是他和马龙两个承担了太多重任

樊振东不在,外协太强了?真实原因是他和马龙两个承担了太多重任

田先生篮球
2024-10-30 21:31:29
麦当劳汉堡大肠杆菌感染者增至90例 美国检查涉事洋葱供应商

麦当劳汉堡大肠杆菌感染者增至90例 美国检查涉事洋葱供应商

新京报
2024-11-01 07:39:08
2024-11-01 08:14:44
清居简出爱看天
清居简出爱看天
分享专业知识,推动知识共享
26文章数 0关注度
往期回顾 全部

科技要闻

华为前三季利润下滑 任正非:我们还在挣扎

头条要闻

耿爽:美代表或又要就乌问题甩锅中国 我索性主动出击

头条要闻

耿爽:美代表或又要就乌问题甩锅中国 我索性主动出击

体育要闻

中国篮球,告别姚明时代

娱乐要闻

黄圣依再次选择不离引发炒作质疑

财经要闻

阿斯利康骗保案余波未止 多位药企高管被查

汽车要闻

腾势Z9 内饰官图首发 怀档设计/广州车展亮相

态度原创

艺术
教育
旅游
数码
公开课

艺术要闻

故宫珍藏的墨迹《十七帖》,比拓本更精良,这才是地道的魏晋写法

教育要闻

当我学会“梅拉宾法则”,和孩子的沟通突然顺畅了

旅游要闻

台湾“首来族”,四川145个景区对你们免除门票

数码要闻

七彩虹 MEOW R16 游戏本新配开售:R9 7845HX + 4060 售 7199 元

公开课

AI如何揭开大自然和宇宙的奥秘

无障碍浏览 进入关怀版