• 为了保证你在浏览本网站时有着更好的体验,建议使用类似Chrome、Firefox之类的浏览器~~
    • 如果你喜欢本站的内容何不Ctrl+D收藏一下呢,与大家一起分享各种编程知识~
    • 本网站研究机器学习、计算机视觉、模式识别~当然不局限于此,生命在于折腾,何不年轻时多折腾一下

Matlab GUI教程0x6–多个GUI中参数的传递(高级)

Matlab admin 3年前 (2016-11-08) 1821次浏览 0个评论 扫描二维码

GUI 中参数传递和数据共享一直是很多 GUI 初学者头疼的问题,但是这个问题却有经常遇到,在 GUI 编程中是不可避免的。

特别是,在 GUI 的多个不同 fig 之间实现数据共享,初学者更加束手无策了。

呵呵,不要太紧张,本节教程将向大家演示如何跨越 GUI 中这条蜀道

其实MATLAB提供了很多种直接或间接方法实现多 fig 中的数据共享,只是大家没有注意罢了:

1、全局变量
2、作为函数的参数传递
3、利用控件的 userdata 数据
4、为 handles 结构体添加新字段
5、setappdata 函数为句柄添加数据
6、跨空间计算 evalin 和赋值 assignin
7、将数据保存到文件,需要时读取
8、带参数调用 GUI 的 M 文件
9、嵌套函数(不适用于 GUIDE 中,只适用纯命令是的 GUI)

本文将介绍一种我认为比较方便的综合性方法!先大概说下原理吧:

运行 GUI 的 M 文件的时候默认返回 GUI 的 figure 对象的句柄 fh,此时我们可以使用guidata 函数获取 fh 中所有控件的信息,其它数据我们可以通过给 handles 结构体增加新字段形式添加

获取数据模板

  1. fh=mygui;
  2. myhandles=guidata(fh);
  3. myhadles.mytag

复制代码

添加字段模板

  1. handles.mydata=mydata;
  2. guidata(hObject,handles);

复制代码

关于带输入参数格式调用 GUI 的 M 文件,这个功能大家用的不多,但是有时却很必要或处理某些问题很方便,可以参考 Matlab 的帮助,在这里我不详细介绍!

如果是同一个 GUI 中数据共享参考另外一个教程

  

该程序实现如下简单功能:在任意一个窗体可以获取在另外一个窗体上输入的字符串,并显示在自己的窗体上

2、在 GUIDE 中打开两个 fig 文件,不会的参考http://www.matlabsky.com/thread-5217-1-1.html

  

3、点击 GUIDE 工具栏的 按钮,自动跳转到相应的 M 文件

4、 首先我们定位到 Quan.m 文件的 pushbutton1_Callback 回调函数处,输入以下内容

  1. % 获取 Daniel 窗体的句柄
  2. % 调用 GUI 的 M 文件时,默认返回窗体句柄,至于带参数调用 GUI 的 M 文件请查看帮助
  3. danielFigureHandle  = daniel;
  4. % 使用 guidata 函数提取 Daniel 窗体上所有空间的信息
  5. % 此时我们就能很容易操作 Daniel 的数据了
  6. danielData = guidata(danielFigureHandle);
  7. % 提取 Daniel 窗体上文本框内的字符串
  8. % 注意此时的结构体是 danielData 不是 handles
  9. daniel_input = get(danielData.editText_Daniel,’String’);
  10. % 将提取的字符串显示在 Quan 窗体上
  11. % 这个就是简单的数据共享
  12. set(handles.display_daniel_input,’String’,daniel_input);
  13. % 再次强调 dnielData 一个以 Daniel 窗体所有控件的 tag 为字段的结构体
  14. % 结构体的值就是对应控件的句柄
  15. % 而 handles 是本窗体的结构体,不要与 dnielData 混淆

复制代码

5、同理打开 Daniel.m 文件,在 pushbutton1_Callback 后面添加

  1. quanFigureHandle  = quan;  %stores the figure handle of Quan’s GUI here
  2. %stores the GUI data from Quan’s GUI here
  3. %now we can access any of the data from Quan’s GUI!!!!
  4. quanData = guidata(quanFigureHandle);
  5. %store the input text from Quan’s GUI
  6. %into the variable quan_input
  7. quan_input = get(quanData.editText_Quan,’String’);
  8. %set the static text on Daniel’s GUI to match the
  9. %input text from Quan’s GUI
  10. set(handles.display_quan_input,’String’,quan_input);
  11. %notice that quanData is the structure containing the data from Quan’s GUI
  12. %notice that handles is the structure containing data from Daniel’s GUI,
  13. %which is the local GUI (i.e., the GUI that this function is running from)

复制代码

6、此时任意一个 GUI 并点击“Get ** Inputs”,此时另外一个 GUI 会自动启动,并获取它的“string”于是实现了一个简单的两个 GUI 中数据共享了。

大家可以体会下,并根据自己的需要修改相关代码,应该就可以实现自己的要求了。


Deeplearn, 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明Matlab GUI 教程 0x6–多个 GUI 中参数的传递(高级)
喜欢 (0)
admin
关于作者:
互联网行业码农一枚/业余铲屎官/数码影音爱好者/二次元

您必须 登录 才能发表评论!