1. 注:此文来自转载,侵删
    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始
    ,一定要勤写记录。
  2.  
  3. 从简单的例子说起吧。
  4.  
  5. 创建Matlab GUI界面通常有两种方式:
  6.  
  7. 1,使用 .m 文件直接动态添加控件
  8.  
  9. 2. 使用 GUIDE 快速的生成GUI界面
  10.  
  11. 显然第二种可视化编辑方法算更适合写大型程序。
  12.  
  13. 一:创建GUI
  14.  
  15. 1. .m文件中动态添加
  16.  
  17. 例如
  18.  
  19. h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…
  20.  
  21. 'numbertitle','off','position',[100 100 300 100]);
  22.  
  23. h_edit=uicontrol('style','edit','backgroundcolor',[1 1 1],'position',[20 20 50 20],...
  24.  
  25. 'tag','myedit','string','1','horizontalalignment','left');
  26.  
  27. h_but1=uicontrol('style','pushbutton','position',[20 50 50 20],'string','INC',...
  28.  
  29. 'callback',['v=eval(get(h_edit,''string''));',...
  30.  
  31. 'set(h_edit,''string'',int2str(v+1));']);
  32.  
  33. h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',...
  34.  
  35. 'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);
  36.  
  37. 2.使用GUIDE帮助创建GUI
  38.  
  39. Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可 进入 GUIDE
  40.  
  41. 新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:
  42.  
  43. Layout Editor:布局编辑器;
  44. Alignment Tool:对齐工具;
  45. Property Inspector:对象属性观察器;
  46. Object Browser:对象浏览器;
  47. Menu Editor:菜单编辑器。
  48.  
  49. 二:使用控件
  50.  
  51. 新建一个布局(窗口),可以在新窗口中添加如下控件
  52.  
  53. 1.静态文本(Static Text 2.编辑框(Edit Text)控件
  54. 3.列表框(Listbox)控件 4.滚动条(Slider)控件
  55. 5.按钮(Push Button)控件 6.开关按钮(Toggle Button)控件
  56. 7.单选按钮(Radio Button)控件 8.按钮组(Button Group)控件
  57. 9.检查框(Check Box)控件 10.列表框(Listbox)控件
  58. 11.弹出式菜单(Popup Menu)控件 12.坐标轴(Axes)控件
  59. 13.面板(Panel)控件
  60.  
  61. 每一个控件都有自己的属性常规属性有:
  62.  
  63. 一、控件风格和外观
  64. 1BackgroundColor:设置控件背景颜色,使用[R G B]或颜色定义。
  65. 2CData:在控件上显示的真彩色图像,使用矩阵表示。
  66. 3ForegroundColor:文本颜色。
  67. 4String属性:控件上的文本,以及列表框和弹出菜单的选项。
  68. 5Visible:控件是否可见。
  69.  
  70. 二、对象的常规信息
  71. 1Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
  72. 2Style:控件对象类型。
  73. 3Tag:控件表示(用户定义)。
  74. 4TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。
  75. 5UserData:用户指定数据。
  76. 6Position:控件对象的尺寸和位置。
  77. 7Units:设置控件的位置及大小的单位
  78. 8)有关字体的属性,如 FontAngle FontName等。
  79.  
  80. 三、控件回调函数的执行
  81. 1BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。
  82. 2ButtonDownFcn属性:按钮按下时的处理函数。
  83. 3CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
  84. 4CreateFcn:在对象产生过程中执行的回调函数。
  85. 5DeleteFcn:删除对象过程中执行的回调函数。
  86. 6Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。
  87.  
  88. 四、控件当前状态信息
  89. 1ListboxTop:在列表框中显示的最顶层的字符串的索引。
  90. 2Max:最大值。
  91. 3Min:最小值。
  92. 4Value:控件的当前值。
  93.  
  94. 你可以使用属性编辑器来设置属性
  95.  
  96. 三:写回调函数 CallBack
  97.  
  98. 每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:
  99.  
  100. 然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成 相应的函数体,函数名,名称一般是 控件 Tag+ Call类型名 参数有三个 ( hObject, eventdata, handles)
  101.  
  102. 其中 hObject 为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄
  103.  
  104. CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等)
  105. DeleteFcn 实在空间对象被清除的时候发生
  106. ButtonDownFcnKeyPressFcn分别为鼠标点击和按键事件Callback
  107.  
  108. CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。
  109.  
  110. 四:句柄图形之间的层次关系
  111.  
  112. 可以创建 图形句柄的常见函数
  113.  
  114. 1figure函数:创建一个新的图形对象。
  115. 2newplot函数:做好开始画新图形对象的准备。
  116. 3axes函数:创建坐标轴图形对象。
  117. 4line函数:画线。
  118. 5patch函数:填充多边形。
  119. 6surface函数:绘制三维曲面。
  120. 7image函数:显示图片对象。
  121. 8uicontrol函数:生成用户控制图形对象。
  122. 9uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。
  123.  
  124. 几个实用的小函数:
  125.  
  126. uigetfile 选择文件对话框
  127. uiputfile 保存文件对话框
  128. uisetcolor 设置颜色对话框
  129. fontsetcolor 设置字体对话框
  130. msgbox 消息框
  131. warndlg 警告框
  132. helpdlg 消息框
  133.  
  134. 不过如果要让父窗口不可用,你需要使用uiwait来定焦于用户对话框。
  135. 例如:
  136.  
  137. h=helpdlg('Please press me!','Attention');
  138. uiwait(h);
  139.  
  140. 四:获取与设置对象属性
  141.  
  142. 常用函数:
  143.  
  144. gcf函数:获得当前图形窗口的句柄
  145. gca函数:获得当前坐标轴的句柄
  146. gco函数:获得当前对象的句柄
  147. gcbo函数:获得当前正在执行调用的对象的句柄
  148. gcbf函数:获取包括正在执行调用的对象的图形句柄
  149. delete函数:删除句柄所对应的图形对象
  150. findobj函数:查找具有某种属性的图形对象
  151.  
  152. 设置方法:
  153.  
  154. 1get函数返回某些对象属性的当前值。例如:
  155.  
  156. pget(obj,'Position');
  157.  
  158. 2)函数set改变句柄图形对象属性,例如:
  159. set(obj,'Position',vect);
  160.  
  161. 五:函数调用
  162.  
  163. 在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
  164. 该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。
  165.  
  166. 例如在一个程序中,创建一个fig后,会生成这样一个m文件:
  167.  
  168. function varargout =febirdfun(varargin)
  169. gui_Singleton = 1;
  170. gui_State = struct('gui_Name', mfilename, ...
  171. 'gui_Singleton', gui_Singleton, ...
  172. 'gui_OpeningFcn', @febirdfun_OpeningFcn, ...
  173. 'gui_OutputFcn', @febirdfun_OutputFcn, ...
  174. 'gui_LayoutFcn', [], ...
  175. 'gui_Callback', []);
  176.  
  177. if nargin && ischar(varargin{1})
  178. gui_State.gui_Callback = str2func(varargin{1});
  179. end
  180.  
  181. if nargout
  182. [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
  183. else
  184. gui_mainfcn(gui_State, varargin{:});
  185. end
  186.  
  187. 解析 一下这个主函数:首先 gui_State是一个结构,指定了figure打开和输出函数,
  188.  
  189. 开始 gui_CallBack为空,如果输入参数个数不为0,接下来将输入第一个参数传递给gui_State.callback
  190.  
  191. 接下来用交给 gui_mainfcn函数处理,gui_mainfcn 根据gui_State和传入参数
  192. 来确定是执子函数,还是打开 fig 文件和运行 OpeningFcnOutputFcn
  193.  
  194. 如过 gui_Callback为空,那么就运行打开主窗口fig文件,否则,调用子函数
  195.  
  196. 这个函数的作用有:
  197. 1.当输入不带参数的时候,能够打开fig文件,并且初始化控件
  198. 2.当指定需要调用的函数名时,可以作为其他控件callback使用 (实则调用同文件中的子函数)
  199. 例如,在某一个控件的 callback 里面这样写:(febrdfun为主函数)
  200. febirdfun("@push_button_Callback",gcbf,[])
  201. 这样的调用就可以调用文件里面的子函数。
  202.  
  203. 当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。
  204.  
  205. 下面看figure Openning Function
  206.  
  207. %================================
  208.  
  209. function Main_OpeningFcn(hObject, eventdata, handles, varargin)
  210.  
  211. handles.output = hObject;
  212. % 通常在这里面定义自己的数据结构例如
  213.  
  214. s=struct("P1",v1...
  215. "P2",v2);
  216. handles.MyStruct=s;
  217. % 更新handles数据结构 非常重要!!
  218. guidata(hObject, handles);
  219.  
  220. %================================
  221. function varargout = Main_OutputFcn(hObject, eventdata, handles)
  222. varargout{1} = handles.output;
  223.  
  224. 这个函数是输出返回值的定义
  225.  
  226. 注意: matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。
  227.  
  228. 六:数据传递
  229.  
  230. matlab GUI程序中进行值传递我经常使用的两种方法:
  231.  
  232. 1.利用主函数 handles 数据结构传值
  233.  
  234. 例如在某一个图像窗口句柄 中有一个对象 handles(可以定义自己的数据结构)
  235.  
  236. 那么在一个子Callback函数中,可以通过handles传递数据:
  237.  
  238. function sliderbar1_Callback(hObject,eventdata,handles)
  239.  
  240. %% eg1
  241.  
  242. v1=get(hObject,'value');
  243.  
  244. obj=handles.Text1 %直接定位 Tag Text1的控件
  245.  
  246. set(obj,'value',v1);
  247.  
  248. %% eg2
  249.  
  250. handles.MyStruct.P1=v1; % 更改handles中的数据
  251.  
  252. guidata(hObject,handles); %更新 handles !!重要
  253.  
  254. end
  255.  
  256. 2.利用控件的 UserData 来传值
  257.  
  258. 每一个控件一般都有一个属于自己的自定义域,userData,你可以定义这样一个域用来保存自己的数据,例如在定义 timer TimerFcn
  259.  
  260. t1=timer('TimerFcn',{@Timer1Fcn},'ErrorFcn',@Timer1ErrorFcn},'Period',1.0,'ExecutionMode','fixedrate');
  261.  
  262. t1.Userfata=handles.MyStruct;
  263.  
  264. 这里 Timer1Fcn的调用看似没有传入任何参数,实际上此函数的定义一定要有至少两个参数
  265.  
  266. function Timer1Fcn(obj,eventata)
  267.  
  268. obj.UserData=XXXXX;%可以这样共享数据
  269.  
  270. end
  271.  
  272. 当然Timer定义的时候允许这样传递一个参数,当然这样也可以进行传值.
  273.  
  274. t1=timer('TimerFcn',{@Timer1Fcn,handles},'ErrorFcn',{@Timer1ErroFcnr,handles},'Period',1.0,'ExecutionMode','fixedrate');

  

转载:关于Matlab GUI的一些经验总结的更多相关文章

  1. 关于Matlab GUI的一些经验总结

    注:此文来自转载,侵删去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起 ...

  2. [转载] 关于matlab GUI的一点心得

    转载自 落落轻尘 [Fig文件方式,即使用菜单File->New->GUI来设计界面] 首先值得注意的是,在低版本matlab上制作的含GUI的m文件一般不能在高版本的matlab上面运行 ...

  3. matlab GUI界面编程总结

    去年做了一些关于Matlab GUI的程序,现在又要做相关的东西,回想起来,当时很多经验没有记录下来,现在回顾起来始终觉得不爽,所以从现在开始,一定要勤写记录. 从简单的例子说起吧. 创建Matlab ...

  4. MATLAB GUI之ABC

    GUIDE 属性设置 name 更改名字 logo 在GUI的".m"文件中的OpeningFcn函数或者OutputFcn函数中添加以下代码: % 设置页面左上角的 LogoI ...

  5. Matlab GUI设计中的一些常用函数

    Matlab GUI常用函数总结 % — 文件的打开.读取和关闭% — 文件的保存% — 创建一个进度条% — 在名为display的axes显示图像,然后关闭% — 把数字转化为时间格式% — ch ...

  6. Matlab GUI界面

    做SVD的时候,看学姐的demo,用到了matlab的GUI,感兴趣就自己学了一下: 从简单的例子说起吧. 创建Matlab GUI界面通常有两种方式: 1,使用 .m 文件直接动态添加控件     ...

  7. matlab GUI保存axes(坐标轴)上的图像

    1.默认方式 matlab GUI默认菜单的保存图像默认为保持全部GUI,包括使用" 菜单->编辑->复制图形". 2 保存可见区域 2.1 代码 [FileName, ...

  8. [学习一个] Matlab GUI 学习笔记 Ⅰ

    Matlab GUI 学习笔记 Ⅰ 1. Foreword Matlab 是严格意义上的编程语言吗?曾经有人告诉我他是通过 Matlab 学会了面对对象编程,我是不信的,但这依然不妨碍它在特殊领域的强 ...

  9. Matlab——GUI初涉

    Matlab——GUI初涉 MATLAB GUI教学视频0:GUI中的基本操作—在线播放—优酷网,视频高清在线观看http://v.youku.com/v_show/id_XMjM2Mjk0MjM2. ...

随机推荐

  1. html-php深入理解

    不再纠结div p span. 写html的时候, 在头脑中, 要等同于/实际上就相当于写一篇图文混排的word文档, 有主标题/子标题, 有正文段落等等. 要根据这些标签的本身的语义来使用! div ...

  2. ubuntu显示桌面的快捷键,以及修改方法

    在ubuntu下面,快速显示桌面,你可以这样做. 1,ctrl+alt+d (默认的) 2,alt+tab 可以切换到桌面 但是我想把它修改成和windows一样的,我该怎么做呢? 其实很简单. 系统 ...

  3. 把Linux安装到移动硬盘上

    把Linux安装到移动硬盘上 转载于:http://mrkh.me/install-linux-on-a-portable-hard-drive.html 这一篇文章讲一下,怎么把linux安装到移动 ...

  4. javascript单例模式的理解

    javascript单例模式的理解 阅读目录 理解单例模式 使用代理实现单例模式 理解惰性单例 编写通用的惰性单例 单例模式使用场景 回到顶部 理解单例模式 单例模式的含义是: 保证一个类只有一个实例 ...

  5. TaskTracker任务初始化及启动task源码级分析

    在监听器初始化Job.JobTracker相应TaskTracker心跳.调度器分配task源码级分析中我们分析的Tasktracker发送心跳的机制,这一节我们分析TaskTracker接受JobT ...

  6. 12 day 1

    #include <cstdio> int i,j,m,n,t; long long f[6000][6000]; inline int min(int a,int b){ return ...

  7. 绕过 <?PHP exit('Access Denied'); ?> 限制

    绕过 <?PHP exit('Access Denied'); ?> 限制   <?php $shellcode='PD9waHBpbmZvKCk7Pz4';//   base64_ ...

  8. 查看别人的css

    ie工具栏的“文件”选项选“另存为”到你本地电脑,存下来有两个文件 一个是空间名称命名的文件夹和html网页,文件加里有三个扩展名为.css的文件

  9. mysql lower,upper实现大小写

    mysql的lower和uppper函数可以将指定字符串转换为小写和大写 select lower('OutSpringTd') as lowerCase, upper('OutSpringTd') ...

  10. iOS 使用Storyboard 和 xib时的一些知识

    以前不太使用xib和storyboard进行布局,后来在工作中参与到了一个项目的维护工作,那个项目就是使用stroyboard的,再加上xcode5对stroyboard的大力支持,就在这里对于使用s ...