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

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.

相关推荐
热点推荐
大陆宣布将中止对台湾地区134个税目进口产品关税减让,岛内迅速关注解读

大陆宣布将中止对台湾地区134个税目进口产品关税减让,岛内迅速关注解读

环球网资讯
2024-05-31 14:53:11
40岁的女人如狼似虎,体现在哪些方面

40岁的女人如狼似虎,体现在哪些方面

好笑娱乐君每一天
2024-05-31 15:53:03
逼蔡振华拍桌子!搞残中国足球!苟仲文落马直指奥运备战猫腻?

逼蔡振华拍桌子!搞残中国足球!苟仲文落马直指奥运备战猫腻?

中国足球的那些事儿
2024-05-31 01:39:26
口碑炸裂!斩获烂番茄新鲜指数100%的历史剧集!

口碑炸裂!斩获烂番茄新鲜指数100%的历史剧集!

娱乐八卦木木子
2024-05-31 23:15:21
浙江大力“清理”三万台电动车,“为罚而罚”引发财产权争议!

浙江大力“清理”三万台电动车,“为罚而罚”引发财产权争议!

袁小二先生
2024-05-31 00:50:03
范冰冰被爆移居当新香港人:突晒豪宅外景俯瞰维多利亚

范冰冰被爆移居当新香港人:突晒豪宅外景俯瞰维多利亚

葫芦哥爱吐槽
2024-05-31 18:59:40
网易官宣魔兽世界回归版本,先开巫妖王怀旧版本,在开正式服

网易官宣魔兽世界回归版本,先开巫妖王怀旧版本,在开正式服

一起玩魔兽硬核哥
2024-05-31 23:20:43
法网第6日综述:夺冠热门渐入佳境,张之臻王欣瑜无缘再次突破

法网第6日综述:夺冠热门渐入佳境,张之臻王欣瑜无缘再次突破

ALL体育
2024-06-01 06:09:06
告别土气的四个微习惯

告别土气的四个微习惯

朗威谈星座
2024-05-31 03:20:15
太现实,央视三胎宣传片,网友:谁说中国人拍不出好的恐怖片的

太现实,央视三胎宣传片,网友:谁说中国人拍不出好的恐怖片的

娱乐的小灶
2024-06-01 00:19:46
江苏漂亮女子去相亲,一眼相中光头男,网友不相信:你是真的饿了

江苏漂亮女子去相亲,一眼相中光头男,网友不相信:你是真的饿了

雅清故事汇
2024-05-31 16:15:09
我国跌为美国第四大进口国,对美出口1519亿美元。前三名是这三国

我国跌为美国第四大进口国,对美出口1519亿美元。前三名是这三国

山股长
2024-05-31 09:10:02
汪峰为森林北写新歌!歌词和给章子怡写的反差大,森林北甜蜜回应

汪峰为森林北写新歌!歌词和给章子怡写的反差大,森林北甜蜜回应

古希腊掌管月桂的神
2024-05-30 14:04:59
7比5和5比7后轰6比1!23岁金花大满贯冠军逆转,郑钦文迎帮手

7比5和5比7后轰6比1!23岁金花大满贯冠军逆转,郑钦文迎帮手

体坛知识分子
2024-06-01 06:10:03
赖清德服软,不到24小时,大陆代表团抵台湾省,解放军举动很罕见

赖清德服软,不到24小时,大陆代表团抵台湾省,解放军举动很罕见

影孖看世界
2024-05-28 19:36:04
绝了,不满姆总加盟!皇马太子联络曼城,瓜帅许诺,欧冠动摇军心

绝了,不满姆总加盟!皇马太子联络曼城,瓜帅许诺,欧冠动摇军心

阿泰希特
2024-05-31 10:27:13
你无意中发现了不得的事?网友:大保健里遇见嫂子

你无意中发现了不得的事?网友:大保健里遇见嫂子

王二哥老搞笑
2024-05-31 14:56:38
黄奇帆:房地产的负债率都飙到90%了,房价怎么可能还会往上涨!

黄奇帆:房地产的负债率都飙到90%了,房价怎么可能还会往上涨!

名岂文章著
2024-05-20 19:28:35
CBA格局大洗牌?曝多支豪门因经济不佳选择重建,球员超市开张

CBA格局大洗牌?曝多支豪门因经济不佳选择重建,球员超市开张

社会故事回忆录
2024-05-31 09:04:21
莫名其妙!印媒:15名解放军士兵头部受印军重击生还希望渺茫

莫名其妙!印媒:15名解放军士兵头部受印军重击生还希望渺茫

小弟萝卜呀1
2024-05-28 21:43:35
2024-06-01 09:12:49
清居简出爱看天
清居简出爱看天
分享专业知识,推动知识共享
26文章数 0关注度
往期回顾 全部

科技要闻

华为上新!余承东:问界6月销量将超4万辆

头条要闻

媒体:中美防长见面后 美方第一时间发新闻稿积极评价

头条要闻

媒体:中美防长见面后 美方第一时间发新闻稿积极评价

体育要闻

欧文:当老二怎么了?硬就行了!

娱乐要闻

白玉兰提名:胡歌、范伟争视帝

财经要闻

证监会:对恒大地产罚款41.75亿

汽车要闻

外观内饰升级/六项权益 全新哈弗H6开启预售

态度原创

房产
数码
健康
艺术
军事航空

房产要闻

重磅!琼海出台楼市新政:住房出租、挂牌计划出售,都可减套数!

数码要闻

真正的咸鱼翻身!两年前的骁龙6 Gen 1怎么就翻红了

晚餐不吃or吃七分饱,哪种更减肥?

艺术要闻

穿越时空的艺术:《马可·波罗》AI沉浸影片探索人类文明

军事要闻

拜登称以色列提出新的三阶段停火方案

无障碍浏览 进入关怀版