使用gui来初始化参数matlab,MATLAB GUI参数传递方式
总结
matlab gui
共有六种参数传递方式和范围各不相同。
大家共享吧!
1
。运用
gui
本身的
varain{}
、
varaout{}
传递参数(注:这种方式仅适用与
gui
间传递数据,
且只适合与主子结构
,
及从主
gui
调用子
gui
,然后关掉子
gui
,而不适合递进结构,即
一步一步实现的方式
)
输入参数传递:
比如子
GUI
的名称为
subGUI,
设想的参数输入输出为:
[out1, out2] = subGUI(in1, in2)
在
subGUI
的
m
文件中(由
GUIDE
自动产生):
1.
第一行的形式为:
function
varargout = subGUI(varargin)
该行不用做任何修改;
varargin
和
varargout
分别是一个可变长度的
cell
数组
(MATLAB
帮助文件中有说明
)
。输入参数
in1
和
in2
保存在
varargin
中,输出参数
out1
,
out2
包含在
varargout
中;
2.
在
subGUI
的
OpeningFcn
中,读入参数,并用
guidata
保存,即:
handles.in1 = varargin{1};
handles.in2 = varargin{2};
guidata(hObject, handles);
返回参数的设置:
1.
在
GUI
子程序的
OpeningFcn
函数的结尾加上
uiwait(handles.figure1);
figure1
是
subGUI
的
Tag
;
2. subGUI
中控制程序结束(如
"OK”
和
"Cancel"
按钮)的
callback
末尾加上
uiresume(handles.figure1)
,不要将
delete
命令放在这些
callback
中;
3.
在子
GUI
的
OutputFcn
中设置要传递出去的参数,如
varargout{1} = handles.out1
;
varargout{2} = handles.out2;
末尾添加
delete(handles.figure1)
;
结束程序。
在
GUI
的
OpenFcn
中,如果不加
uiwait
,
程序会直接运行到下面,执行
OutputFcn
。也就是说程序一运
行,返回值就确定了,再在其它部分对
handles.output
作更改也没有效果了。
加上
uiwait
后,只有执行了
uiresume
后,才会继续执行到
OutputFcn
,在此之前用户有充分的时间设置返回值。
通过以上设置以后,就可以通过
[out1, out2] = subGUI(in1, in2)
的形式调用该子程序。
在一个
GUI
中调用另一个
GUI
时,主
GUI
不需要特别的设置,同调用普通的函数一样。在打开子
GUI
界面的同时,主程序还可以响应其它的控件。不需要担心子
GUI
的返回值被传错了地方。
2.
运用
global
定义全局变量传递参数
(适用于
gui
内控件间以及不同
gui
间)
这种方式恐怕是最简单的方式,是很省心!但是但是,简单的问题就在于有时你会很头疼!因为在每一个要到该全局变量的地方,你都要添一句
gloal x
,还有就是如果你在一个地方修改了
x
的值,那么所有
x
的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问题在于,套用
C++
的一句话,全局变量破坏了程序的封装性!所以,全局变量
是能少用尽量少用
。
3.
运用
UserData
传递参数
(
gui
内)
直接通过对象的
userdata
属性进行各个
callback
之间的数据存取操作。首先必须将数据存储到一个特定的对象中,假设对象的句柄值为
ui_handle,
需要存储的值为
value,
则输入以下程序即可:
set('ui_handle','UserData',Value);
此时,
value
数据就存在句柄值为
ui_handle
的对象内,在执行的过程中若要取回变量可以通过以下方式在任意
callback
中获取该数据值
:
value=get(''ui_handle,'UserData');
虽然使用这种方法简单
,但是每个对象仅能存取一个变量值,因此当同一对象存储两次变量时
,先前的变量值就会被覆盖掉,因此都用
UserData
存储简单与单一的数据
。如下面有两个
gui
函数,
myloadfn
加载
mydata.mat
文件,该文件内存储
XYData
变量,其值为
m*2
的绘图矩阵,加载后将该变量值存储到
当前的窗口的
UserData
属性中。另一个
myplotfcn
函数则是用以获取该
UserData
属性
中存
取的绘图数据,然后绘图。代码如下:
function myloadfcn
load mydata;
set(gcbf,'UserData',XYdata)
function myplotfcn
XYdata=get(gcbf,'UserData');
x=XYData(:,1);
y=XYData(:,2);
plot(x,y);
4.
应用
setappdata getappdata
与
rmappdata
函数
(gui
间和
gui
内,推荐使用)
使用上面三个函数最有弹性处理数据的传送问题,与
UserData
的方式相类似,但是克服
UserData
的缺点,使一个对象能存取多个变量值。
(1)getappdata
函数
VALUE
=
getappdata(H,NAME)
(2)setappdata
函数
setappdata(H,NAME,VALUE)
(3)rmappdata
rmappdata(H,NAME)
首先在
matlab
命令窗口输入
magic(3)
数据,因此当前的工作空间就存储了
magic(3)
这组数据了,然后建立一个按钮来获取并显示
magic(3)
数据
>>A=magic(3);
>>setappdata(gcf,'A','A');%save
>>uicontrol(‘String’,'
显示矩阵
A'
,
'callback','A=getappdata(gcf,'A')');
当在
主子
gui
内
调用时,可以如下设置
fig1
调用
fig2
时,使用
fig2
指令来打开
fig2,
在
fig2
的
m
文件中,在回调函数中用
setappdata(fig1,'A',A)
实现返回
fig1
,并将参数
A
传递给
fig1
然后在
fig1
的使用
A
的地方添加
A=getappdata
(
fig1
,
‘A’
)
。
但这种方式的一个问题就是每调用一次,
fig1
的数据就得初始化一次,这是因为
setappdata(fig1,'A',A)
中出现了
fig1
,调用一次
setappdata
就得运行一次
fig1
的缘故,解决方案就是把
setappdata(fig1,'A',A)
改为
setappdata(0,'A',A)
,这样把
A
读入
matlab workspace
,相当于一个全局变量了,但当然比直接用
global
定义全局变量好!
5.
结合
handles
和
guidata
函数
(
gui
内,不推荐使用,经常出现问题,比如在
handles
中添加了变量对象
Y
后可能就会挤掉
handles
另外一个对象)
他的使用格式如下,如果你在
pushbutton1
中得到一个变
量
X
,相传出去,那么在
pushbutton1
的
callback
中,在得到
X
后添加如下代码:
handles.X=X;
guidata(hObject,handles)
(
注意,一定是两行连写)
在
pushbutton2
中要用到
X
是,在其
callback
先添加
X=handles.X
;
即可得到
X
的值。
6.
运用
save
和
load
(
importdata
)传递参数
(gui
内和
gui
间)
将某变量
x
的值先存到磁盘,用的时候在调用。格式如下:
save('*.mat','x'
);用的时候就用
load('*.mat'),
但这样只是把
x
读
到了
matlab workspace
,不会用显示
,你还要再去查看这个变量名
,
然后才能用,
建议使用
p=importdata('*.mat'),p
是一个结构体,可以随意使用了。
当然,这种方式涉及到磁盘读写,速度当然会有影响
的,一般情况不用,通常用在保存以及导入某个变量时!
使用gui来初始化参数matlab,MATLAB GUI参数传递方式相关推荐
- matlab能做什么设计,MATLAB中GUI设计领悟
最近在给宝钢做一个基于MATLAB平台的操作界面,用到了有关GUI的东西.为此特地学习了一下有关知识,在论坛里逛来逛去,也没有发现非常有价值的东西,反而让自己更加的郁闷和烦乱,后来又狠下心来耐心的看了 ...
- matlab中gui的设计,[转]MATLAB中GUI设计领悟
来源:隐藏 -------------------------全文分割线---------------------------------------------------------------- ...
- matlab设计GUI可视化界面全方位解析
如何使用matlab设计GUI及导出 一.GUI的基础知识 开始生成GUI界面 回调函数 Handles结构体 GUI中的参数传递 二.控件介绍 一.普通按钮 二.可编辑文本(edit)和静态文本(t ...
- MATLAB图像去噪GUI设计
一.应用背景 在信息化的社会里,图像在信息传播中所起的作用越来越大.所以,消除在图像采集和传输过程中而产生的噪声,保证图像受污染度最小,成了数字图像处理领域里的重要部分. 二.研究内容 本文主要研 ...
- 圆形上下挤压 matlab,基于Matlab的GUI设计双螺杆挤压机系统仿真软件
基于Matlab的GUI设计双螺杆 挤压机系统仿真软件 王玉德,张文孝,韩翠玲 (1.大连水产学院,辽宁大连116023;2.山东省机电学校,山东兖州272105) 1 1 2 DesignofSim ...
- matlab中GUI的属性检查器中的XLimMode是什么_OpenBCI_GUI部件指南
什么是图形用户界面? GUI小部件是适合OpenBCI GUI界面窗格的小工具.GUI小部件的示例包括时间序列.FFT小部件.网络小部件等. 在每个小部件的左上角,都有一个下拉菜单,列出了所有可用的小 ...
- matlab伺服驱动,基于MATLAB的GUI设计伺服驱动系统仿真软件
0引言计算机仿真技术是设计.研究和开发现代机械电子设备的新型手段,具有巨大的优越性,目前我们在机床伺服系统的工程设计中已广泛采用了这项技术.当前较流行的是采用MATLAB软件包进行设计,该软件包对控制 ...
- MATLAB软件GUI应用程序
12.1图形用户界面(GUI)介绍 图形用户界面是为用户和程序之间提供信息交流的一种方式,用户可以通过鼠标.键盘等输入设备即可对计算机中复杂的问题进行处理.用户只需要通过界面交互就可以正确的执行,而无 ...
- 基于MATLAB软件GUI界面的可编程电音合成器软件
基于MATLAB软件GUI界面的可编程电音合成器软件 1 总体设计 1.1 设计思路 1.2 软件运行 2 软件功能说明 2.1 软件界面 2.1.1 菜单栏 2.1.2 工具栏 2.1.3 MySy ...
- 基于YOLOv4的目标检测系统(附MATLAB代码+GUI实现)
摘要:本文介绍了一种MATLAB实现的目标检测系统代码,采用 YOLOv4 检测网络作为核心模型,用于训练和检测各种任务下的目标,并在GUI界面中对各种目标检测结果可视化.文章详细介绍了YOLOv4的 ...
最新文章
- 如何使用github托管项目---快速入门(菜鸟教程)
- 【Android 安全】DEX 加密 ( 代理 Application 开发 | multiple-dex-core 依赖库开发 | 配置元数据 | 获取 apk 文件并准备相关目录 )
- C语言经典算法五个人问岁数!——————【Badboy】
- css 单行文本溢出显示省略号
- 寻找最大的K个数,Top K问题的堆实现
- 阿里如何应对亿级高并发大流量?如何保障高可用和稳定性!
- NFC 验证平台搭建
- Python timeit模块的使用
- 佛山ABB服务器维修,佛山南海ABB软启动器报故障服务点
- java 解析大xml文件_java-通过网络解析大型XML文件
- 基于Python的淘宝用户行为数据分析
- Go语言 linux下开发 IDE -SpaceVim\NeoVim
- 【Photoshop 教程系列第 2 篇】如何将 PS 中字体单位由点改为像素
- js判断字符串下划线个数
- 2019郑州大学计算机专业分数线,2019年郑州大学优势专业排名及分数线
- 【Unity3D】UGUI之Toggle
- 近两年学习Python的人越来越多,Python就业形势很好?
- 软件项目中的决策分析_软件工程中的决策管理
- 使用代码访问EOS智能合约
- 北方民族大学计算机科学与导论试题,2016秋计算机导论(北方民族大学 张春梅)...