MATLAB GUI编程总结

MATLAB GUI编程总结MATLABGUI编程总结:创建MatlabGUI界面通常有两种方式:1使用.m文件直接动态添加控件2使用GUIDE快速的生成GUI界面一、创建GUI方法一.:在.m文件中动态添加h_main=figure(‘name’,‘ademoofguidesign’,‘menubar’,‘none’,…’numbertitle’,’off’,’posi…

大家好,又见面了,我是你们的朋友全栈君。

MATLAB GUI编程总结:

  • 创建Matlab GUI界面通常有两种方式:

1 使用 .m 文件直接动态添加控件

2 使用 GUIDE 快速的生成GUI界面

一、创建GUI

  • 方法一.:在 .m文件中动态添加

    h_main=figure(‘name’,‘a demo of gui design’,‘menubar’,‘none’,…
    
    'numbertitle','off','position',[100 100 300 100]);
    
    h_edit=uicontrol('style','edit','backgroundcolor',[1 1 1],'position',[20 20 50 20],...
    
    'tag','myedit','string','1','horizontalalignment','left');
    
    h_but1=uicontrol('style','pushbutton','position',[20 50 50 20],'string','INC',...
    
    'callback',['v=eval(get(h_edit,''string''));',...
    
    'set(h_edit,''string'',int2str(v+1));']);
    
    h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',...
    
    'callback',['v=eval(get(h_edit,''string''));','set(h_edit,''string'',int2str(v-1));']);
    
  • 方法二
    在Command 里面输入 GUIDE 或者从菜单里面,或者从快捷按钮均可 进入 GUIDE
    新建并且保存后,会生成相应的fig文件和m文件,在Layout编辑视图,可以使用如下工具:

      Layout Editor:布局编辑器;
      Alignment Tool:对齐工具;
      Property Inspector:对象属性观察器;
      Object Browser:对象浏览器;
      Menu Editor:菜单编辑器。
    

二、控件的使用

新建一个布局(窗口),可以在新窗口中添加如下控件

1.静态文本(Static Text)                                 2.编辑框(Edit Text)控件
3.列表框(Listbox)控件                                   4.滚动条(Slider)控件
5.按钮(Push Button)控件                                 6.开关按钮(Toggle Button)控件
7.单选按钮(Radio Button)控件                             8.按钮组(Button Group)控件
9.检查框(Check Box)控件                                 10.列表框(Listbox)控件
11.弹出式菜单(Popup Menu)控件                            12.坐标轴(Axes)控件
13.面板(Panel)控件

每一个控件都有自己的属性常规属性有:

一、控件风格和外观
(1)BackgroundColor:设置控件背景颜色,使用[R G B]或颜色定义。
(2)CData:在控件上显示的真彩色图像,使用矩阵表示。
(3)ForegroundColor:文本颜色。
(4)String属性:控件上的文本,以及列表框和弹出菜单的选项。
(5)Visible:控件是否可见。

二、对象的常规信息
(1)Enable属性: 表示此控件的使能状态,设置为on”,表示可选,为“off”时则表示不可选。
(2)Style:控件对象类型。
(3)Tag:控件表示(用户定义)。
(4)TooltipString属性:提示信息显示。当鼠标指针位于此控件上时,显示提示信息。
(5)UserData:用户指定数据。
(6)Position:控件对象的尺寸和位置。
(7)Units:设置控件的位置及大小的单位
(8)有关字体的属性,如 FontAngle, FontName等。

三、控件回调函数的执行
(1)BusyAction:处理回调函数的中断。有两种选项:即Cancel:取消中断事件,queue:排队(默认设置)。
(2)ButtonDownFcn属性:按钮按下时的处理函数。
(3)CallBack属性:是连接程序界面整个程序系统的实质性功能的纽带。该属性值应该为一个可以直接求值的字符串,在该对象被选中和改变时,系统将自动地对字符串进行求值。
(4)CreateFcn:在对象产生过程中执行的回调函数。
(5)DeleteFcn:删除对象过程中执行的回调函数。
(6)Interruptible属性:指定当前的回调函数在执行时是否允许中断,去执行其他的函数。

四、控件当前状态信息
(1)ListboxTop:在列表框中显示的最顶层的字符串的索引。
(2)Max:最大值。
(3)Min:最小值。
(4)Value:控件的当前值。

三:写回调函数 CallBack

每个控件都有几种回调函数,右键选中的控件一般会有如下菜单:
然后就可以跳转到相应的 Editor中编辑代码,GUIDE会自动生成 相应的函数体,函数名,名称一般是 控件 Tag+ Call类型名 参数有三个 ( hObject, eventdata, handles)

其中 hObject 为发生事件的源控件,eventdata为事件数据结构,handles为传入的对象句柄
CreateFcn 是在控件对象创建的时候发生(一般为初始化样式,颜色,初始值等)
DeleteFcn 实在空间对象被清除的时候发生
ButtonDownFcn和KeyPressFcn分别为鼠标点击和按键事件Callback
CallBack为一般回调函数,因不同的控件而已异。例如按钮被按下时发生,下拉框改变值时发生,sliderbar 拖动时发生等等。

四:句柄图形之间的层次关系

可以创建 图形句柄的常见函数
1.figure函数:创建一个新的图形对象。
2.newplot函数:做好开始画新图形对象的准备。
3.axes函数:创建坐标轴图形对象。
4.line函数:画线。
5.patch函数:填充多边形。
6.surface函数:绘制三维曲面。
7.image函数:显示图片对象。
8.uicontrol函数:生成用户控制图形对象。
9.uimenu函数:生成图形窗口的菜单中层次菜单与下一级子菜单。
几个实用的小函数:
uigetfile 选择文件对话框
uiputfile 保存文件对话框
uisetcolor 设置颜色对话框
fontsetcolor 设置字体对话框
msgbox 消息框
warndlg 警告框
helpdlg 消息框
不过如果要让父窗口不可用,你需要使用uiwait来定焦于用户对话框。
例如:
h=helpdlg(‘Please press me!’,‘Attention’);
uiwait(h);

四:获取与设置对象属性

常用函数:
gcf函数:获得当前图形窗口的句柄
gca函数:获得当前坐标轴的句柄
gco函数:获得当前对象的句柄
gcbo函数:获得当前正在执行调用的对象的句柄
gcbf函数:获取包括正在执行调用的对象的图形句柄
delete函数:删除句柄所对应的图形对象
findobj函数:查找具有某种属性的图形对象
设置方法:

(1)get函数返回某些对象属性的当前值。例如:
p=get(obj,‘Position’);
(2)函数set改变句柄图形对象属性,例如:
set(obj,‘Position’,vect);

五:函数调用

在一个m文件中,可以定义多个函数,但是文件名一定要与第一个函数(主函数)一致,
该文件中其他函数则为本文件的私有函数,外部不可访问(可以通过参数调用的方法访问,下面会描述)。

例如在一个程序中,创建一个fig后,会生成这样一个m文件:

function varargout =febirdfun(varargin)
gui_Singleton = 1;
gui_State = struct(‘gui_Name’, mfilename, …
‘gui_Singleton’, gui_Singleton, …
‘gui_OpeningFcn’, @febirdfun_OpeningFcn, …
‘gui_OutputFcn’, @febirdfun_OutputFcn, …
‘gui_LayoutFcn’, [], …
‘gui_Callback’, []);

if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
解析 一下这个主函数:首先 gui_State是一个结构,指定了figure打开和输出函数,
开始 gui_CallBack为空,如果输入参数个数不为0,接下来将输入第一个参数传递给gui_State.callback。
接下来用交给 gui_mainfcn函数处理,gui_mainfcn 根据gui_State和传入参数
来确定是执子函数,还是打开 fig 文件和运行 OpeningFcn和OutputFcn。
如过 gui_Callback为空,那么就运行打开主窗口fig文件,否则,调用子函数
这个函数的作用有:
1.当输入不带参数的时候,能够打开fig文件,并且初始化控件
2.当指定需要调用的函数名时,可以作为其他控件callback使用 (实则调用同文件中的子函数)
例如,在某一个控件的 callback 里面这样写:(febrdfun为主函数)
febirdfun(“@push_button_Callback”,gcbf,[])
这样的调用就可以调用文件里面的子函数。
当然也可以使用其他文件里面的函数作为callback,不过那样的话,数据传递会麻烦一些。
下面看figure Openning Function
%================================
function Main_OpeningFcn(hObject, eventdata, handles, varargin)
handles.output = hObject;
% 通常在这里面定义自己的数据结构例如
s=struct(“P1”,v1…
“P2”,v2);
handles.MyStruct=s;
% 更新handles数据结构 非常重要!!
guidata(hObject, handles);
%================================
function varargout = Main_OutputFcn(hObject, eventdata, handles)
varargout{1} = handles.output;
这个函数是输出返回值的定义
注意: matlab 中,function 对应的 end 可以没有,但是随着版本的更新,end将会被要求。

六、matlab中的数据

在MATLAB GUI中,数据分两种:GUI data和application data。 两种数据的存取机制是相同的,但是GUI data使用起来比较方便。
每一个GUI 图形界面都维持一个和自己的界面的图形(figure)相联系的一个handles数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的“容器”,里面存放了figure内所有控件的句柄。
同时,handles结构也可以被figure内所有控件的回调函数访问,因为回调函数的输入参数中都有handles结构。此外,在控件的回调函数内可以把数据存储到handles结构中。
guidata函数:取得和存储handles结构数据
例如:在编辑框edit的回调函数内想获得t编辑框的句柄,hObject可以,也可用handles.edit,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已

hObject是调用回调函数时直接传过来的
handles.edit是从handles结构中取得的。
但是,在控件的CreateFcn函数中如果想访问控件,必须用hObject,而不能用handles.edit,因为这时控件还没被创建,其句柄还没有加入到handles结构中。
各控件的回调函数中,hObject的值是不一样的,分别代表调用回调函数的控件的句柄,而handles结构却是一样的。这种机制便于figure内的不同控件的回调函数内传递数据。

把进度条嵌入到matlab GUIDE界面中

function mywaitbar(x,varargin)
if nargin < 1
    error('Input arguments not valid');
end
fh = varargin{end};
set(0,'CurrentFigure',fh);
%fAxes = findobj(fh,'type','axes');
fAxes =varargin{2};
set(fh,'CurrentAxes',fAxes);
if nargin > 1
    hTitle = get(fAxes,'title');
    set(hTitle,'String',varargin{1});
end
fractioninput = x;
x = max(0,min(100*x,100));
if fractioninput == 0    
    cla
    xpatch = [0 x x 0];
    ypatch = [0 0 1 1];
    xline = [100 0 0 100 100];
    yline = [0 0 1 1 0];
    patch(xpatch,ypatch,'r','EdgeColor','r','EraseMode','none');
    set(fh,'UserData',fractioninput);
    l = line(xline,yline,'EraseMode','none');
    set(l,'Color',get(gca,'XColor'));   
else
    p = findobj(fh,'Type','patch');
    l = findobj(fh,'Type','line');
    if (get(fh,'UserData') > fractioninput)
        set(p,'EraseMode','normal');
    end
    xpatch = [0 x x 0];
    set(p,'XData',xpatch);
    xline = get(l,'XData');
    set(l,'XData',xline);  
end
drawnow;
 
 
%主程序调用:修改句柄函数值就可以指定axes1作为条形框了
h1=findobj(handles.axes1,'visible','off');%获取按键1的可视化句柄
set(h1,'visible','on');%设置句柄为可见
mywaitbar(0,'Please Wait...',handles.axes1,handles.figure1);
TheEndTime = 600; 
for t = 1:TheEndTime
       mywaitbar(t/TheEndTime,[num2str(floor(t*100/TheEndTime)),'%'],handles.axes1,handles.figure1);
end

matlab中delete、close、cla、cla含义

matlab中删除对象
删除对象
(1)delete:删除文件或对象图形
删除文件对象h的格式为:delete(‘filename’)或delete filename
删除图形对象h的格式为:delete(h);
若要无条件删除所有的图形对象,则:set(0,‘showhiddenhandles’,‘on’);delete(get(0,’’children));

(2) clf:清空当前figure窗口。
格式如下:
clf:删除当前窗口中所有对象(handlevisibility的值为on)
clf(‘rest’):删除当前窗口所有对象(不论句柄是否隐藏);并重设fig属性为系统默认值,但以下4个属性保留原值:position,units,paperposition,paperunits。当人若integerhandle属性值为off,重设后,integerhandle属性值为on原浮点形式的句柄无效,此时Matlab会自动为其分配一个整形句柄,原句柄失效。若要返回新创建的整形句柄,使用下面的格式:
figure handles=clf(fig.‘reset’);
若在使用过程中(handlevisibility的值为off)照样删除窗口中所有对象,并重设窗口属性。

(3)cla:清除当前坐标系。
格式如下
cla:删除当前坐标轴中句柄不隐藏的对象(handlevisibility的值为on)
cla rest:删除当前坐标系中所有的对象(不论句柄是否隐藏),并重设axes属性为默认值,但以下2个属性保留原值:position和units

(4)close:关闭当前窗口。
其调用格式列举如下:
close:关闭当前窗口,等价于close(gcf)
close(h):关闭对象h的窗口
close name:关闭名为h的窗口
close all:关闭所有句柄可见的窗口
close all hidden:关闭所有的窗口
close all force:关闭所有的gui窗口,即使该窗口的closerequestfcn设置该窗口不关闭。
status=close(……):关闭指定窗口,成功返回1,否则,返回0。
close函数调用时,会执行指定的figure对象的closerequestfcn函数。该函数默认执行closereq,该函数相当于delete(get(0,‘currentfigure’)).而delete函数不执行closerequestfcn函数,它仅仅删除指定的figure。

(5)closereq:默认的窗口请求关闭函数,无输入和输出参数,相当于delete(gcf).

MATLAB 中GUI edit的多行设置

Edit多行设置,要把Edit的Max和Min属性修改,令Max-Min>2(其实Max表示最多多少行,Min表示最少多少行)。

然后set字符串的时候,用数字”10″作换行符(因为换行符的ASCII码是10)。

代码如下:
str1 = [‘第一行’, 10];
str2 = [‘第二行’, 10];
str3 = [‘第三行’, 10];
str4 = ‘没有了’;
str = [str1, str2, str3, str4];
set(handles.editResult, ‘string’, str);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/130595.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • TCP与udp区别_个人总结和工作总结的区别

    TCP与udp区别_个人总结和工作总结的区别TCP与UDP区别总结:1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保证可靠交付3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)4、每一条TCP连接只能是点到点的;UDP

  • javascript 页面后退并刷新

    javascript 页面后退并刷新javascript做页面后退常使用的方法是window.history.back();这样确实可以做到后退的功能,但是项目中,常常并不只是后退就行完成需求,往往需要在后退的同时,刷新后退的页面信息,比如后退到首页同时刷新首页的最新数据,这样的需求通过上面这种方法就没法满足了,为了实现这个需求,我们需要使用到document.referrer这个方法可以取到上一个页面的具体路径

  • java帝国的崛起[通俗易懂]

    java帝国的崛起[通俗易懂]1C语言帝国的统治现在是公元1995年,C语言帝国已经统治了我们20多年,实在是太久了。 1972年,随着C语言的诞生和Unix的问世,帝国迅速建立统治,从北美到欧洲,从欧洲到亚洲, 无数程序员臣服在他的脚下。帝国给我们提供了极好的福利:贴近硬件, 运行极快,效率极高。 使用这些福利…

  • 视频压缩算法的相关知识(转载)

    视频压缩算法的相关知识(转载)视频压缩算法的相关知识视频压缩的基本原理,一些常见压缩算法的概念视频压缩算法的相关知识视频压缩基本概念视频压缩算法的相关知识MPEG-1MPEG视频压缩编码后包括三种元素:I帧(I-fram

  • MPLS TE原理基础和配置

    MPLS TE原理基础和配置

  • Java开发手册之索引规约「建议收藏」

    Java开发手册之索引规约「建议收藏」Java开发手册之索引规约

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号