某个天朗气清的下午,老师给我布置了一个Matlab GUI 界面设计的任务,然后欢天喜地回家结婚去了,留我在美好的假期里继续孤零零地在学校里耕耘。好的,在此先祝贺老师新婚快乐,百年好合。然后咱们开始从零开始,一边学,一边做。

作为一个GUI小白,当然不能盲目瞎胡来。我们首先要了解gui设计的一些基本的知识,比如如何添加控件、修改控件名称、如何定义变量、获取变量、怎么传递变量等等。这些在网络上都可以搜的到,在此不多赘述了。这边奉上几个小链接,都是很好的学习资料,大佬们总结的太好了。

1.matlab如何创建图形用户界面gui?
上面这个例子可以让我们学会一些基本的操作。如何设置静态文本、动态文本、坐标轴什么的。可以自己尝试做个简单的小程序玩一下。好的,我做了个1+1=2. 挺简单的是吧!(smile~)后来改了一次函数什么的,总之第一天花一点时间先熟悉一下界面。

2.MATLAB GUI界面编程——一些细节问题
第二个例子,这篇博文也写的很清楚。不过我要强推的是这篇文章最后推荐的另一篇文章。该网页内二楼提供了一个PDF文档,是一个很完整的界面编程实例。再次上链接,我是个稳妥的搬运工~一个实例搞定MATLAB界面编程.pdf 。

又花了一天时间,把这个实例好好学习了一下,在自己的Matlab 里运行成功了,我的Matlab版本是R2016b。运行成功以后,也重复看了好几遍这个程序,理解程序里对变量的定义和传递(这个蛮重要的)。关于这个实例的内容在此不提,跟着一步步做就可以了。

整个做完这一整个例子,我开始信心满满地(划掉——)投身老师给我的任务。主要分为以下几个步骤:
(1)规定自己的设计目标。比如导入数据、输入哪些参数、输出哪些参数、要显示什么图像、哪些数据要保存以及保存成什么类型的数据等等,这些都要提前想好并列出清单。
(2)界面设计排版。鉴于之前有不断被甲方爸爸要求做PPT、改PPT做了好长一段时间的辛酸经历,我觉得界面设计的美观程度还是蛮重要的。于是我参照了一些和我要做的任务类似的GUI界面,对我的GUI界面进行初步排版设计。
(3)编写程序。我给自己的程序分了几个阶段:第一步是数据的打开、关闭;第二步,主程序的编写;第三步,输出结果的保存、导出;第四步,处理一些细节问题和小错误。

emmm,整个过程大概花了整整三天的时间,一边报错,一边修改,可算是调试成功并完成了,真是万幸。下面记录一些自己在学习过程中遇到的问题和部分代码。

1、数据的打开,读取
(1)设计目标:点击“打开”按钮,选择txt文件,读取txt文件里的数据。

function m_file_open_Callback(hObject, eventdata, handles)
% hObject    handle to m_file_open (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% filepath = uigetdir('*.*','请选择文件夹');
[filename, pathname] = uigetfile( ...{'*.bmp;*.jpg;*.png;*.jpeg;*.txt', 'Image Files (*.bmp, *.jpg, *.png,*.jpeg,*.txt)'; ...'*.*', 'All Files (*.*)'}, ...'选择txt文件');
if isequal(filename,0) || isequal(pathname,0) % 处理取消打开文件的情况return;
end
filepath=pathname;%
handles.filepath=filepath;
fid=[pathname filename];%将文件名和目录名组合成一个完整的路径,获取txt文本
fid1=fopen(fid);% 读入 txt 文本信息
data1=[];
s1=0;
while ~feof(fid1)%~feof表示若未读到文件末尾则继续循环s1=s1+1;tline1=fgetl(fid1);%fgetl 按行读取idx=strfind(tline1,',');%查找 , 字符串if ~isempty(idx) % ~isempty判断是否为空,是为0,否为1if strcmp(tline1(1),'"') %strcmp比较字符串,如果是和 " 一样的,返回1data1(s1,1)=str2num(tline1(2:idx(1)-1));elsedata1(s1,1)=str2num(tline1(1:idx(1)-1));endstr1=tline1(idx(1)+1:idx(2)-1);%查找时间信息所在的位置data1(s1,2)=datenum(str1); % timefor i=4:14data1(s1,i)=str2num(tline1(idx(i-1)+1:idx(i)-1));%依次存储第3,4,5...14个信息endend
end
fclose(fid1);
handles.data1=data1;
guidata(hObject, handles);

2、设置变量中遇到的一些问题(主要是针对输入变量的)
设计目标:输入变量既有自己的默认值也可以手动编辑,在点击“恢复默认值”按钮时,可以恢复到默认值状态。另外设置“清空”按钮,点击“清空”按钮,可以对可编辑文本框进行清空,需要自己手动输入数值。
下面是我设置的几个按钮;

(1)可编辑文本变量的输入。
在主程序的“运行”按钮的callback回调函数下,在function m_file_run_Callback(hObject, eventdata, handles)下输入:

m_image_a=str2double(get(handles.m_image_a'String'));
m_image_b=str2double(get(handles.m_image_b,'String'));

这样就可以获得编辑框内的数字了。m_image_a是设置的对应编辑文本的Tag值。顺便提一下,回调函数的查看和设置都是可以自动定位的,只要我们在设计界面内的控件上 右键 > 查看回调,就可以选择我们需要的回调函数了。

(2)可编辑文本的初始化或设置默认值。
我想别人打开我的界面的时候,点击“恢复默认值”按钮,就可以让对应的可编辑文本框m_image_a里显示我想要的内容。那我们就需要在可编辑文本框m_image_a的CreateFcn回调函数下进行定义。在function m_image_a_CreateFcn(hObject, eventdata, handles) 的最后加上

set(hObject,'string','3');

这样我们就能够将Tag值为m_image_a的可编辑文本框的默认值设置好啦,我设置的是3。注意在一个界面里,每个控件都有自己唯一的Tag名称,那就是他们的大名,不能有重复的两个Tag值。还有设置某个控件的Tag值,名称中间不要加空格,否则是无效滴。

(3)可编辑文本的清空。
这个步骤分为两步,
第一步,在可编辑文本m_image_a的KeyPressFcn回调函数 function m_image_a_KeyPressFcn(hObject, eventdata, handles)后加上如下代码

set(hObject,'string','','Enable','on');
uicontrol(hObject);

第二步,在“清空”按钮的callback回调函数function m_image_clear_Callback(hObject, eventdata, handles)后加上如下代码

feval(@m_image_a_KeyPressFcn,handles.m_image_a,eventdata,handles);

feval函数可以用来调用其他函数的功能。

(4)静态文本变量的输出
这个静态文本的变量呢,我们是不能自己编辑的,那我们是通过其他变量计算得到的,然后显示在静态文本框内。那我们在“运行”按钮的callback回调函数下继续编辑

m_image_c=m_image_a+m_image_b; %m_image_a 和 m_image_b都是可编辑文本变量,m_image_c 是静态文本变量
set(handles.m_image_c,'String',num2str(m_image_c,'%.2f')); % 保留两位小数

m_image_a 和 m_image_b都是可编辑文本变量,m_image_c 是静态文本变量。

(5)静态文本变量的清空
和可编辑文本变量的清空类似,同样咱们分为两步。
第一步,在静态文本m_image_c的CreateFcn回调函数 function m_image_c_CreateFcn(hObject, eventdata, handles) 后面加上,

set(hObject,'string','');

第二步,在“清空”按钮的callback回调函数function m_image_clear_Callback(hObject, eventdata, handles)后加上如下代码

feval(@m_image_c_CreateFcn,handles.m_image_c,eventdata,handles);

那像这样咱们在点击“清空”按钮之后,就可以把可编辑文本和静态文本都清空空啦!

(6)坐标轴的清空
我的运行程序完成以后,是要显示图形的。运行程序以后,就会出图,那么如果我想清空数据,重新运行,那就要把界面上的数据和图都清除干净。清除图形我用的是下面这个方法,同样是在“清除”按钮的callback回调函数下进行编辑,加上

trydelete(allchild(handles.axes_test));
end

axes_test是要清除图形对应的坐标轴Tag值。

(7)其他变量的定义,输出
如果在程序运行的过程中,我们需要定义其他的一些变量,后期需要导出这些变量的值的话,我们需要对其进行定义。在“运行”按钮的callback回调函数下,进行编辑,参考如下

d=8;
handles.d=d;
set(handles.m_image_d,'String',num2str(d,'%.2f'));
guidata(hObject, handles);

3、输出数据的保存、导出

【下次再写。。。。下班时间到了。。。】

【好了,又到上班时间了,咱们继续来介绍输出数据的保存和导出】

我们先在菜单编辑器里加一个“保存” 的菜单项,具体的设置操作请参考前文里提到的实例:一个实例搞定MATLAB界面编程.pdf 。当然,也可以自己设置一个“保存结果”的按钮,想怎么设置就看各位的心情了~


我们就按照第一个,在餐单编辑器里的“保存”菜单下,加一个“保存”的子菜单,Tag值设为m_file_save。

以保存变量result为例,变量result 是我们自己定义(或计算出来的)变量,在“运行”按钮的callback回调函数下,进行编辑,figure_m_image是整个设计界面的Tag值,在所有控件之外的地方右键,就可以更改它的Tag值。

result=8;
handles.result=result;
setappdata(handles.figure_m_image,'result',result);
guidata(hObject, handles);

那么要想保存变量result,我们在刚刚设置的“保存”按钮的callback回调函数其后加上如下代码:

result=getappdata(handles.figure_m_image,'result');
[FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'选择保存的文件名');  %% pathname获取保存数据路径, filename获取保存数据名称
if ~FileNamereturn;
elsestr= [PathName,FileName];
end
fid = fopen(str,'wt');fwrite(fid, '', 'integer*4');for n=1:11fprintf(fid,'%s\n',char(result{n}));    %   \t表示空格endfprintf(fid,'\r\n');   %换行fclose(fid);

这样就可以以txt,xls等格式保存并导出我们的数据了,其他的格式可以自己探索。

4、其他的一些小玩意
你的主程序如果也和我一样需要运行一段时间的话,我们可以给它加上进度条,这样别人在运行我们的程序的时候,可以比较直观的看到我们的程序在运行,不然点了运行按钮以后,没啥变化,然后过了一段时间,才跳出来我们的结果。

同样的,我们在“运行”按钮的callback回调函数下,进行编辑,在主程序的前面,加上如下代码:

steps=100;
hwait=waitbar(0,'请等待>>>>>>>>');
for k=1:stepsif steps-k<=5waitbar(k/steps,hwait,'即将完成');pause(0.05);elseif 50<steps-k<5str=['请勿取消',num2str(k),'%'];waitbar(k/steps,hwait,str);pause(0.05);elsestr=['正在运行中',num2str(k),'%'];waitbar(k/steps,hwait,str);pause(0.05);end;
end;

然后在主程序的最后,加上

close(hwait); % 注意必须添加close函数,也就是说运行完成后让此进度条消失。

这样我们的程序开始运行以后,就会跳出进度条;等到运行完成以后,进度条就会消失;


ummmm,差不多就这么多了。其他的一些例如如何退出程序啊什么的,在之前反复提的那篇实例pdf文档里都有很详细的说明,在此处就不重复提了。上面那些代码不一定是最优的代码,后面会继续学习~
最后依旧致敬 LYC 同学~ 向他学习,day day up! over~
秋天到了,眠食诸希珍重~

Matlab GUI界面编程小白学习笔记相关推荐

  1. MATLAB GUI界面编程——一些细节问题

    写在前面的话: 本篇博文主要对自己在进行MATLAB GUI设计时遇到的一些细节问题进行总结,点击下面目录中的相关问题,可以直接跳转至相应位置.另外,需要声明的是,我所使用的MATLAB版本--MAT ...

  2. MATLAB GUI 界面编程——常见问题和解决方法

    前言 本篇博客主要对博主自己在做毕设 GUI 设计时遇到的一些细节问题进行总结纪录,点击下面目录中的相关问题,可以直接跳转至相应位置.另外,需要声明的是,我所使用的MATLAB版本--MATLAB R ...

  3. GUI的演化和python编程——Python学习笔记之二十二

    GUI的演化和python编程--Python学习笔记之二十二 写完了有关长寿的两篇博文,本该去完成哥德尔那个命题六的.对计算机图形界面的好奇,让我把注意力暂时离开那个高度抽象难读的哥德尔,给转到计算 ...

  4. 01.Java 编程入门学习笔记20210307

    Java 编程入门学习笔记-day01 第0章:编程入门 1.计算机的概述 计算机 = 硬件 + 软件 1.1硬件:冯诺依曼体系 CPU: CPU的衡量标准:速度的计量单位是赫兹(Hz),1Hz相当于 ...

  5. Linux C编程一站式学习笔记2

    Linux C编程一站式学习笔记 chap2 常量.变量和表达式 本书以C99为标准 一.继续hello world 加入更多注释的hello world 可以用ctrl+(shift)+v复制到vi ...

  6. Windows编程课程学习笔记

    一. Windows程序内部运行机制--Windows编程课程学习笔记 二. MFC框架程序分析--Windows编程课程学习笔记 三. 简单绘图--Windows编程课程学习笔记 四. 文本编程-- ...

  7. Python快速编程入门#学习笔记01# |第一章 :Python基础知识 (Python发展历程、常见的开发工具、import模块导入)

    全文目录 ==先导知识== 1 认识Python 1.1.1 Python的发展历程 1.1.2 Python语言的特点 2. Python解释器的安装与Python程序运行 1.2.1 安装Pyth ...

  8. 图形用户界面(GUI)编程可以学习C++ Builder,架构先进(和C#一样拖控件)

    图形用户界面(GUI)编程可以学习C++ Builder,架构先进(和C#一样拖控件),入门比较容易. -------------------- C++ Builder是真正的可视化的开发工具.C++ ...

  9. MATLAB GUI界面小总结

    MATLAB GUI界面小总结 新建和运行 添加背景图片 点击按钮后运行其他程序 在坐标区中绘图 自动在表格中写入数字 弹出式菜单使用方法 可编辑文本的数据传递 msgbox 修改GUI名字时的一些问 ...

最新文章

  1. iOS 数据持久化 -- Core Data (2)
  2. SparkSQL核心编程
  3. 【解决方案】npm安装vue超时(ERR! errno ETIMEDOUT)
  4. ReentrantReadWriteLock可重入读写锁分析
  5. php 地图两点距离计算,计算地图上两点间的距离PHP类
  6. Qt文档阅读笔记-Qt Core的官方解析
  7. Dart入门—库、泛型与异常
  8. abb机器人写字程序实例_abb机器人程序实例
  9. VB 感染EXE 程序病毒源码
  10. [Usaco2007 Demo]City skyline
  11. 【Vegas原创】xp_sendmail提示“邮件已发送”但收不到邮件的解决方法
  12. 2021-07-04应用的生命周期
  13. IOS发布APP Store
  14. java 顺丰电子面单,【第三方API】顺丰电子面单SDK调用总结-java
  15. win10 家庭版升级win11
  16. 根据身份证号码获取身份证信息(省市县、出生日期、性别)
  17. 在Android软按键中添加Menu键。
  18. 钉钉视频下载方法地瓜网络钉钉视频下载器
  19. 安装matlab贝叶斯网络工具箱
  20. linux 文件名带日期,在linux中追加日期到文件名

热门文章

  1. 服务器系统坏了怎么拷贝数据,服务器系统坏了如何导出sql数据库
  2. Quartz:老而弥坚的开源任务调度框架,用起来够丝滑
  3. 图片压缩软件工具下载列表大全
  4. 计算机中cmd的指令如何停下,怎么样用CMD命令实现电脑倒计时和快捷键关机操作...
  5. 用遗传搜索算法求函数2*x1^2+3*x2^2的最大值(C++实现)
  6. 3D格式转换工具HOOPS Exchange最全技术指南(四):4大功能特征与典型使用场景
  7. win10计算机内的快捷图标,win10系统任务栏添加计算机快捷图标的图文办法
  8. 无法爬取淘宝商品页面
  9. win10网络 计算机终止,又一个win10即将终止?各大版本终止日期大全,你准备好了吗...
  10. 小米机顶盒卡顿怎么办?高价低配的小米盒子对比6G运存的当贝MAX 1