用MATLAB2011a编写的 gui界面用久了,会出现卡顿怎么解决?(重新打开就不卡了)怎么解决啊

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用MATLAB2011a编写的 gui界面用久了,会出现卡顿怎么解决?(重新打开就不卡了)怎么解决啊相关的知识,希望对你有一定的参考价值。

参考技术A 先看在一个GUI界面内部的传递的数据
每一个控件的回调函数头:
function myc_Callback(hObject, eventdata, handles)

第一个参数是hObject,是跟这个callback所关联的控件的handles,在它自己的callback下,可以用代号-> hObject 来调用它。。不用管那么麻烦的概念,只用知道,控件自己的回调函数调用自己的属性,只用hObject.属性名 就可以了(中间一点)。
第二个参数是MATLAB的保留参数
第三个handles,是这个GUI界面的代号。可以通过它获取这个界面的所有信息。所以在控件A自己的回调函数中,要获取或者设置别的控件的属性,就用 handles.别的控件Tag.属性
------------------------------

handles hObject 都是结构体。正常的编程概念。

handles格式是一个存放数据的缸。控件的handles是小缸,它的名字叫做hObject;GUI界面的handle是一个大缸,并且这个缸名字也叫做handles;大缸里存放了所有的小缸和所有用户数据,你只需 handles.控件A的tag 就可以存取控件A的信息。
GUIDE创建了一个大缸:结构体handles,handles包括了figure中所有控件的句柄,也包括figure的句柄
比如一个GUI包括一个edit text, 一个panel,一个pop-up menu和一个push button,GUIDE用每个控件的tag来命名handle,handles结构体内容如下:
figure1: 160.0011
edit1: 9.0020
uipanel1: 8.0017
popupmenu1: 7.0018
pushbutton1: 161.0011
output: 160.0011

那我怎么把自己计算出或者别的什么数据放到这个缸里呢?
^_^ 在任何地方
handles.自己的变量名 = 某些值 (其实也就是给结构体添加成员变量)
这样你就定义了自己的变量。
在任何地方
b=handles.自己的变量名 (结构名加点号来引用成员变量)
就可以得到这个变量值,同样也可以修改它。
别忘了使用
guidata(hObject, handles);(不用改,直接黏贴) 在函数末尾来保存你对handles和hObject的操作。(不然你自定义的变量就没了)

%guidata( 视窗句柄 , 全部句柄 ),如果视窗句柄位置不是视窗句柄,而是一个控件的句柄,那么这个控件的父视窗(parent figure)会被调用。所以guidata中的视窗句柄 可以是figure的句柄,也可以是figure内所包含的控件的句柄,不管是哪种情况,最终handles会和figure相关联。全部句柄即GUI句柄handles

2. 怎么在控件callback函数体之外获取控件和用户自己的数据

GUI界面的handles保存着所有控件的信息以及用户自己的数据,所以只要获取GUI的handles就可以获取所有。
比如在自己定义的函数里获取handles,只需将handles作为参数传进去就可以

function my_function(handles)

% handles是GUI的handles
%调用GUI内任意一控件的信息
%get(handles.你控件的tag,'要获取的属性名');

temp=get(handles.my_popup,'Value');

计时timer中:

% 在figure创建完成后创建 timer 对象,将handles传入Callback函数
t = timer('TimerFcn', @timerCallback, handles, 'ExecutionMode', 'fixedDelay', 'Period', 1.0);
% 设置窗口关闭的回调函数
set(handles.figure1, 'DeleteFcn', @DeleteFcn, t);
% 启动定时器
start(t);
%传入handles
function timerCallback(obj, event, handles)
temp=get(handles.my_popup,'Value');
end
% 窗口关闭的响应函数-停止计时器
function DeleteFcn(hObject, eventdata, t)
stop(t);
end

3 在其他子函数或者非figure内控件的callback内保存用户数据到guidata

GUIDE中, GUIDE生成了一个包括所有GUI句柄的结构体:handles,我们可以保存用户数据到其中(GUIDE generates a handles structure that contains the GUI's handles. You can add your own data to it)

guidata( 视窗句柄 , 全部句柄 )

如果视窗句柄位置不是视窗句柄,而是一个控件的句柄,那么这个控件的父视窗(parent figure)会被调用。所以guidata中的视窗句柄 可以是figure的句柄,也可以是figure内所包含的控件的句柄,不管是哪种情况,最终handles会和figure相关联。全部句柄即GUI句柄handles

guidata(hObject, handles);

在figure控件callback之内调用guidata(hObject, handles);,hObject是控件的句柄。如果在其他子函数或者非figure控件的callback知中使用guidata保存数据,hObject就不再是控件句柄,会出错。所以我们要用figure的句柄代替hObject,即handles.figure1

guidata( handles.figure1 , handles);
例如在上述计时器的callback函数中保存data: guidata( handles.figure1 , handles);
4、在不同GUI之间传递数据

传入
那就来看打开一个GUI界面时,传给他的参数有哪些。

function mygui_OpeningFcn(hObject, eventdata, handles, varargin)
所有的启动参数都是通过varargin传到它的OpeningFcn里面的。那启动参数可以是哪些呢?

1、figure,也就是窗口参数。
比如说position之类
例如:打开这个GUI时,使用这个命令 mygui('Position',[434 234 234 34])则表示打开窗口在这个位置;还有哪些可控属性可以查help。
2、自定义参数 。
如果传入的参数不是figure的属性(matlab查找不到你输入的属性名),则你输入的参数作为一个向量存放在varargin里面。
比如mygui('路人甲','80‘),那varargin1存放了'路人甲',varargin2=’80‘

那mygui中对这读取两个数据进行反应,就达到了传入参数的目的。

传出
那怎么把数据传出来呢?
将你要输出的数据存在handles.output里面
在GUI任意地方
handles.output=数据1;
handles.secend_output=数据2;
然后在GUI的outputFcn里面加上
varaginout1=handles.output;
varaginout2=handles.secend_output;

这样就把数据传出来了。

看每一个GUI的最外层的那句
function varargout = mygui(varargin) 看输入输出,就是这样了。把GUI本身就是一个函数,
b=mygui(一些传入的参数) 就执行GUI并返回结果
则b就得到了传出来的结果。

安卓手机用久了变慢,只要打开这个5个隐藏按钮,手机不再卡顿,流畅如同新机|蓝视星空第122期

安卓手机用久了变慢,只要打开这个5个隐藏按钮,手机不再卡顿,流畅如同新机|蓝视星空第122期

本期视频主要给大家分享的手机使用小技巧,还是以安卓机为例。相信不少小伙伴都有这样的经历,手机用的时间长了,你就会发现,爱机不像新机那么流畅了,有时候还会出现卡顿现象。当然相当大一部分小伙伴都没有定期清理内存和系统垃圾的习惯,除了以上的常规方式让手机流畅外,安卓系统还内置了一些功能,可以让手机更流畅,前提是你要打开手机的开发者选项,因为默认的情况下,开发者选项是隐藏的。只要打开隐藏的这五个按钮,你的手机立马变新机,而且流畅自如,下面就看视频吧:

安卓手机用久了变慢,只要打开这个5个隐藏按钮,手机不再卡顿,流畅如同新机|蓝视星空第122期


如果你对我的视频有任何想要说的,可以在文章下面留言,也可以通过私信的方式联系我。

点击“阅读原文”,看高清视频


以上是关于用MATLAB2011a编写的 gui界面用久了,会出现卡顿怎么解决?(重新打开就不卡了)怎么解决啊的主要内容,如果未能解决你的问题,请参考以下文章

CPU用久了,性能不会下降吗?

怎么用matlab编写一个实验数据拟合的GUI界面程序,

电脑用久了越来越卡怎么办?

MATLAB GUI有什么用

安卓手机用久了太卡?这招最管用了!

手机电脑用久了,对写字这个技能已经生疏了,温习一下