MATLAB GUI编程技巧汇编.docx

上传人:b****2 文档编号:2236085 上传时间:2022-10-28 格式:DOCX 页数:35 大小:152.30KB
下载 相关 举报
MATLAB GUI编程技巧汇编.docx_第1页
第1页 / 共35页
MATLAB GUI编程技巧汇编.docx_第2页
第2页 / 共35页
MATLAB GUI编程技巧汇编.docx_第3页
第3页 / 共35页
MATLAB GUI编程技巧汇编.docx_第4页
第4页 / 共35页
MATLAB GUI编程技巧汇编.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

MATLAB GUI编程技巧汇编.docx

《MATLAB GUI编程技巧汇编.docx》由会员分享,可在线阅读,更多相关《MATLAB GUI编程技巧汇编.docx(35页珍藏版)》请在冰豆网上搜索。

MATLAB GUI编程技巧汇编.docx

MATLABGUI编程技巧汇编

GUI编程技巧汇编

1.如何使gui编的界面一运行就居中?

方法一:

a>假如当前的figure的句柄是h,则在程序运行的刚开始,用这个命令,

          set(h,'visible','off');        %使h对应的图不可见.

b>然后你再进行你的其它的操作,

c>最后,在程序的结尾部分,用这两个语句:

              movegui(h,'center');  %将这个图移到中央.详细用法参阅help  movegui

              set(h,'visible','on');    %恢复其可见性.

方法二:

functionfigureMiddled

figure;

set(0,'units','pixels');

set(gcf,'units','pixels');

screenrect=get(0,'screensize');

screenwidth=screenrect(3);

screenheight=screenrect(4);

figwidth=600;

figheight=200;

figposition=[(screenwidth/2-figwidth/2)...

  (screenheight/2-figheight/2)...

  figwidthfigheight];

set(gcf,'position',figposition);

2.有关GUI实时显示的问题

首先,用MATLAB做实时显示其效果并不是很好,主要原因就是它的速度慢,尤其是你的程序中出现循环时,速度更慢.

  前几天,我也做了一个实时显示的东西,我的做法如下:

        1.建立一个图,如h=plot(x,y);

                    set(h,'erasemode','xor')  %设置擦除方式.

        2.建立一个死循环,不断的接受数据,并且不断的更新x,y

        3.  用这个指令set(h,'xdata',x,'ydata',y),使x,y的数据不断的得到更新.

        4.用屏幕刷新指令drawnow进行刷新.

        就这个方法就可以做到实时了.

3.关于参数传递

关于参数传递主要有三种方法:

  1).就是用定义全局变量的方法来实现,如global  a,等这种用法,这种一般用在小程序中,因为如果全局变量太多的话,会造成系统混乱.

  2).应用对象的userdata属性,直接通过对象的userdata属性来进行各个callback之间的数据存取操作.首先把数据存到一个特定的对象中,然后在取出来,如下:

      >>set('ui_handle','userdata',value)

      >>value=get('ui_handle','userdata')

    这种方法虽然简单,但是缺点是每个对象只能存取一个变量值.

  3).利用setappdata,getappdata,rmappdata函数来实现,这几个函数来进行数据传递是最有弹性的.使用方法和第二种方法类似.

4.怎么直接将下面一段.txt格式导到MATLAB中?

用load命令loade:

\data\ccc.txt;我的文件是e盘data下的

其实还有一个方法可以导入,有没有试过textread呢

5.函数结构与参数传递

1)

最近简单整理了一下发过的东西,将大家比较困惑的两个问题,再强调一下。

这个问题我也曾经想过很久很久。

就是某个函数的子函数,可能具有复用性,而我又不想改变原来的函数,怎样才能调用这个子函数呢?

那就是给每一个函数加一个壳。

例如这个函数结构:

functionvarargout=test_function(varargin)

%....................

ifnargin==0

%创建界面。

%即使不创建界面,也可以采用这种函数结构。

figurehandle=test_generatefigurecontent;

%初始化函数,可以用于创建初始化数据。

test_initfiguecontent(figurehandle);

ifnargout>0

varargout{1}=figurehandle;

end

elseifischar(varargin{1})

try

ifnargout>0

[varargout{1:

nargout}]=feval(varargin{:

});

else

feval(varargin{:

});

end

catch

disp(lasterr);

end

end

%-------------------------------------------------------------------------

functionfigurehandle=test_generatefigurecontent;

.....................................

handles=guihandles(figurehandle);

guidata(figurehandle,handles);

%--------------------------------------------------

functiontest_initfiguecontent(h)

handles=guidata(h);

DefaultData=test_GetDefaultData;

........................................

%--------------------------------------------------

functionDefaultData=test_GetDefaultData;

DefaultData.ParaName={'height';'width';};

DefaultData.ParaKanaName={'高度';'宽度';};

DefaultData.height=20;

DefaultData.width=5;

%--------------------------------------------------

functiontest_Uicontrol_Callback(h);

handles=guidata(h);

........................................

%return;

-------------------------------------------------------------------------

如果你要得到test_function里面的默认数据,就可以在其他函数中使用如下调用方式就能够得到:

DefaultData=test_function('test_GetDefaultData');

程序会通过这个转换器进入子函数:

elseifischar(varargin{1})

try

ifnargout>0

[varargout{1:

nargout}]=feval(varargin{:

});

else

feval(varargin{:

});

end

catch

disp(lasterr);

end

end

2)

关于参数传递

1.尽量在内存中提取:

方法有三种:

①采用function的varargin和varargout传送,②存在handle的ApplicationData中,③保存在handles里面。

当然还有其他方法。

2.存在硬盘上,采用save和load。

3.用全局变量,最次的办法,有时却是最好的办法。

关于nargin,nargout,varargin,varargout

nargin:

输入参数的个数,主要用于两个方面:

①判断输入参数的个数,如果输入参数个数不对,可以警告或其他处理;②根据参数个数的不同可以做不同的处理。

如:

ifnargin==0

error;

elseifnargin==1

…………

elseifnargin==2

…………

else

warndlg('……‘,’‘,‘modal')

return;

end

nargout:

输出参数的个数,用法同上。

varargin:

输入参数的总和,保存为cell结构。

提取方式如下:

A=varargin{1};

B=varargin{2:

end};

varargout输出参数。

见到的最常见的用法是:

ifnargout>0

varargout{1}=figurehandle;

end

3)

关于handles:

实际上这个handles是MATLAB中GUI编程中最常用的一个句柄管理变量。

handles的生成:

handles=guihandles(figurehandle);将figure中所有对象中“Tag”属性有值的句柄的handle采集在一起。

handles是结构名,每个“Tag”域名里保持此对象的句柄。

handles的保存:

guidata(figurehandle,handles);handles将保存在figure对象的“ApplicationData”的一个域名里。

handles的使用:

handles=guidata(h);其中为figure中任意一个对象的句柄。

handles.SpeechSourceGui可能是一个figure的句柄,“userdata”是一个对象的属性,可以在其中存取任何数据。

但是我不怎么用它,一则它只能存一个变量;二则它无法存入变量的名字,很难区分。

4)

关于feval

feval,首先我们可以把它理解为一个函数转换器。

执行到feval时,系统将首先寻找内部函数,如果没有找到,再尝试找外部函数。

feval也是一个函数封装器,在执行时它能够调用某个函数;但是在编译时,又可以不将这个函数编译到当前模块中。

feval还有一个很强大的功能,如果结合了这个函数结构,就可以在函数外部调用一个函数的内部函数或子函数。

5)

关于setappdata,getappdata

setappdata,将数据保存在对象的“ApplicationData”属性中。

getappdata,从对象的“ApplicationData”属性中提取数据,如果没有定义,就为空。

setappdata和getappdata操作的对象,最好为figure_handle,便于管理和扩展。

Matlab的高级编程和对象控制,将大量使用这两个函数。

6)

关于function_handle

function_handle在matlab环境下还是可以用的,但是不能支持编译,也就是说无法脱离matla

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1