做一个实例,搞定MATLAB界面编程
在MATLAB中创建用户界面和GUI应用程序
在MATLAB中创建用户界面和GUI应用程序MATLAB是一种广泛应用的数学软件,对于数据分析和科学计算具有强大的功能。
然而,仅仅通过MATLAB的命令行窗口进行操作往往不够便捷,特别是当需要进行大量的重复性操作时。
为了解决这个问题,MATLAB提供了创建用户界面(User Interface,简称UI)和GUI(Graphical User Interface)应用程序的功能。
1. GUI应用程序的基本概念GUI应用程序可以通过可视化的方式与用户进行交互,通过按钮、滑块、文本框等控件来实现用户与程序的数据传递和操作。
在MATLAB中创建GUI应用程序的首要步骤是创建一个GUI窗口,可以通过MATLAB提供的GUIDE(GUI Development Environment)工具进行操作,也可以通过编写代码的方式来创建。
2. 使用GUIDE创建GUI应用程序GUIDE是MATLAB提供的一个可视化工具,可以帮助用户创建GUI应用程序。
使用GUIDE可以通过拖拽控件的方式来创建窗口,并使用属性编辑器对控件进行设置。
例如,可以添加按钮和文本框,并设置按钮的回调函数,以实现按下按钮时触发特定的操作。
GUIDE还提供了布局管理器,使得控件的排列和布局更加灵活。
创建完成后,GUIDE会生成一个.m文件和一个.fig文件,分别对应GUI应用程序的代码和界面。
3. 通过编写代码创建GUI应用程序除了使用GUIDE,用户还可以通过编写代码的方式来创建GUI应用程序。
首先,需要创建一个窗口,可以使用MATLAB中的`figure`函数来实现。
然后,可以使用不同的MATLAB函数来添加各种控件,例如`uicontrol`函数用于添加按钮,`uimenu`函数用于添加菜单等。
通过设置控件的属性和回调函数,可以实现控件的响应和交互。
4. GUI应用程序实例假设我们需要一个简单的计算器应用程序,用户可以输入两个数值并选择进行加法、减法、乘法或除法运算。
MATLAB程序设计及应用实例
c=input('请输入一个字符','s'); if c>='A' & c<='Z'
disp(setstr(abs(c)+1)); elseif c>='a'& c<='z'
disp(setstr(abs(c)-1)); elseif c>='0'& c<='9'
disp(abs(c)-abs('0')); else
disp(c); end
5.1.4 选择结构- switch语句
switch语句
其语句格式为: switch 表达式 case 值1 语句组1 case 值2 语句组2 …… case 值m 语句组m otherwise 语句组m+1 end
5.1.4 选择结构- switch语句
例 某商场对顾客所购买的商品实行打折销售,已知打折标 准,求所售商品的实际销售价格
例 矩阵乘法运算要求两矩阵的维数相容,否则会出错。 先求两矩阵的乘积,若出错,则自动转去求两矩阵的点乘
利用Matlab的图形用户界面(GUI)功能,设计并实现实验主界面
(1)利用Matlab的图形用户界面(GUI)功能,设计并实现实验主界面;(2) 实现在“符号计算”图形用户界面中的各项符号计算功能,如实现Matlab的求极限、求导、求不定积分与定积分、级数求和、方程组的符号求解、常微分方程的符号求解等符号计算;(3) 利用Matlab的二维、三维绘图功能,实现图形用户界面(GUI)中的部分符号计算的可视化,即给出符号计算实例的同时实现该实例的图形化描述。
如下图给出了一个简单的GUI界面,学生可以参考如下图设计出自己的GUI界面。
程序如下:hf=figure('Position',[200,200,700,500],...'Name','信计08(2)班阿卜杜热黑木20080803417', ...'NumberTitle','off','MenuBar','none');uicontrol(hf,'Style','Frame','Position',[0,0.15,0.45,1],...'Units','normalized','Back',[0,1,1]);COMM1=['n=str2num(get(he1,''String''));', ...%求导连接'b=sym(get(he7,''String''));',...'dec=diff(b,n);', ...'set(he8,''string'',char(dec));'];COMM2=['a=str2num(get(he2,''String''));', ...%求极限连接'f=sym(get(he7,''String''));',...'lim=limit(f,a);', ...'set(he8,''string'',char(lim));'];COMM3=['g=sym(get(he7,''String''));',... %不定积分连接'int_1=int(g);', ...'set(he8,''string'',char(int_1));'];COMM4=['a=str2num(get(he3,''String''));', ... %级数求和连接'b=str2num(get(he5,''String''));', ...'f=sym(get(he7,''String''));',...'sum_1=symsum(f,a,b);', ...'set(he8,''string'',char(sum_1));'];COMM5=['a=str2num(get(he4,''String''));', ... %定积分连接'b=str2num(get(he6,''String''));', ...'f=sym(get(he7,''String''));',...'int_2=int(f,a,b);', ...'set(he8,''string'',char(int_2));'];COMM6=['f=get(he7,''String'');',...'dsolve_1=dsolve(f,''x'');', ...'set(he8,''string'',char(dsolve_1));'];COMM7=['f=get(he7,''String'');',...'ezplot(f);'];COMM8=['g=get(he8,''String'');',...'ezplot(g);'];uicontrol(hf,'Style','Push','Position',[0.02,0.9,0.11,0.06],...'String','求导','Units','normalized','Call',COMM1); uicontrol(hf,'Style','Text','Position',[0.17,0.85,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','阶数','Back',[0,1,1]);he1=uicontrol(hf,'Style','Edit','Position',[0.25,0.9,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.72,0.13,0.06],...'String','求极限','Units','normalized','Call',COMM2);uicontrol(hf,'Style','Text','Position',[0.17,0.67,0.08,0.1],...'Units','normalized','Horizontal','center',...'String','极限点','Back',[0,1,1]);he2=uicontrol(hf,'Style','Edit','Position',[0.25,0.72,0.15,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.58,0.13,0.06],...'String','不定积分','Units','normalized','Call',COMM3);uicontrol(hf,'Style','Push','Position',[0.02,0.45,0.13,0.06],...'String','级数求和','Units','normalized','Call',COMM4);uicontrol(hf,'Style','Text','Position',[0.31,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he5=uicontrol(hf,'Style','Edit','Position',[0.38,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.44,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he3=uicontrol(hf,'Style','Edit','Position',[0.24,0.45,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.32,0.13,0.06],...'String','求定积分','Units','normalized','Call',COMM5);uicontrol(hf,'Style','Text','Position',[0.31,0.31,0.06,0.06],...'Units','normalized','Horizontal','center',...'String','上限','Back',[0,1,1]);he6=uicontrol(hf,'Style','Edit','Position',[0.38,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Text','Position',[0.17,0.3,0.08,0.06],...'Units','normalized','Horizontal','center',...'String','下限','Back',[0,1,1]);he4=uicontrol(hf,'Style','Edit','Position',[0.24,0.32,0.06,0.06],...'Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','Push','Position',[0.02,0.2,0.16,0.06],...'String','解微分方程','Units','normalized','Call',COMM6);uicontrol(hf,'Style','text','Position',[0.48,0.9,0.13,0.06],...'String','原函数','Units','normalized');he7=uicontrol(hf,'Style','edit','Position',[0.65,0.9,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);uicontrol(hf,'Style','text','Position',[0.48,0.77,0.13,0.06],...'String','结果函数','Units','normalized');he8=uicontrol(hf,'Style','text','Position',[0.65,0.77,0.30,0.06],...'String','','Units','normalized','Back',[0,1,0]);h_axes=axes('position',[0.55,0.2,0.4,0.5]);uicontrol(hf,'Style','push','Position',[0.58,0.02,0.13,0.06],...'String','初始绘图','Units','normalized','call',COMM7);uicontrol(hf,'Style','push','Position',[0.80,0.02,0.13,0.06],...'String','结果绘图','Units','normalized','call',COMM8);uicontrol(hf,'Style','Push','Position',[0.02,0.02,0.08,0.06],...'String','退出','Units','normalized','Call', 'close');。
matlab实验6图形用户界面设计
实验6. 图形用户界面设计一、 实验目的1. 掌握图形对象属性的基本操作;2. 掌握菜单及对话框设计、建立控件对象的方法。
二、 实验环境1. 计算机2. matlab7.x三、 实验说明1. 正确操作,认真观察;2. 实验学时:2学时;3. 学会使用help ;4. 保存整理实验结果,提交实验报告。
四、 实验内容1.设计如教材P374 图1所示的菜单,并在此基础上增加选项:可以改变曲线的颜色,可以改变窗口背景颜色。
2.(选做)采用图形用户界面,从键盘输入参数a 、b 、n 的值,考察参数对极坐标曲线)cos(θρn b a +=的影响。
五、 实验程序及结果1.figure('Color',[1 1 1],'Position',[400 300 500 250],'Name','201100000','NumberTitle','off','MenuBar','none');hplot=uimenu(gcf,'Label','&plot');%设置Plot 菜单项uimenu(hplot,'Label','Sin Wave','Call',['t=-pi:pi/20:pi;','y=sin(t);','plot(t,y);','set(hgon,''Enable'',''on'');','set(hgoff,''Enable'',''on'');','set(hlinecolor,''Enable'',''on'');'],'Accelerator','s');uimenu(hplot,'Label','Cos Wave','Call',['t=-pi:pi/20:pi;','y=cos(t);','plot(t,y);','set(hgon,''Enable'',''on'');','set(hgoff,''Enable'',''on'');','set(hlinecolor,''Enable'',''on'');'],'Accelerator','c');%设置Option 菜单项 hoption=uimenu(gcf,'Label','&option');hgon=uimenu(hoption,'Label','&grid on','Call','grid on','Enable', 'off');hgoff=uimenu(hoption,'Label','&grid off','Call','grid off','Enable', 'off');hlinecolor=uimenu(hoption,'Label','&Line Color','Separator','on','Enable', 'off');uimenu(hlinecolor,'Label','&red','Accelerator','r','Call','set(plot(t,y),''Color'',''r'');');uimenu(hlinecolor,'Label','&blue','Accelerator','b','Call','set(plot(t,y),''Color '',''b'');');uimenu(hlinecolor,'Label','&green','Accelerator','g','Call','set(plot(t,y),''Colo r'',''g'');');%设置Exit菜单项uimenu(gcf,'Label','Exit','Call','close(gcf)');%设置快捷菜单hc=uicontextmenu;hlc=uimenu(hc,'Label','背景颜色');uimenu(hlc,'Label','red','Call','set(gcf,''Color'',''r'');');uimenu(hlc,'Label','blue','Call','set(gcf,''Color'',''b'');');uimenu(hlc,'Label','green','Call','set(gcf,''Color'',''g'');');set(gcf,'UIContextMenu',hc);2.%设置对话框的颜色(灰色),位置,大小等属性值hf=figure('Color',[0.5 0.5 0.5],'Position',[200 200 400 250],'Name','201100000','NumberTitle','off','MenuBar','none');%设置图形演示界面的位置,大小,不设的话默认在中心位置axes('Position',[0.35 0.23 0.6 0.7]);%设置提示部分uicontrol(hf,'Style','Text','Units','normalized','Position',[0.05 0.7 0.10.1],'Horizontal','center','String','a=','Back',[1 1 0]);uicontrol(hf,'Style','Text','Units','normalized','Position',[0.05 0.5 0.10.1],'Horizontal','center','String','b=','Back',[1 1 0]);uicontrol(hf,'Style','Text','Units','normalized','Position',[0.05 0.3 0.10.1],'Horizontal','center','String','n=','Back',[1 1 0]);%设置文本输入框的属性值he1=uicontrol(hf,'Style','Edit','Units','normalized','Position',[0.15 0.7 0.1 0.1],'Back',[1 1 1]);he2=uicontrol(hf,'Style','Edit','Units','normalized','Position',[0.15 0.5 0.1 0.1],'Back',[1 1 1]);he3=uicontrol(hf,'Style','Edit','Units','normalized','Position',[0.15 0.3 0.1 0.1],'Back',[1 1 1]);%这里因为函数比较短,直接写了进去,如果函数比较长时可以选择函数调用COMM=['a=str2num(get(he1,''string''));','b=str2num(get(he2,''string''));','n=str2num(get(he3,''string''));','theta=0:0.01:2*pi;','tho=a.*cos(b+n.*theta);', 'polar(theta,tho);'];%设置按钮属性值uicontrol(hf,'Style','Push','Units','normalized','Position',[0.05 0.05 0.10.12],'String','绘图','Call',COMM);uicontrol(hf,'Style','Push','Units','normalized','Position',[0.85 0.05 0.10.12],'String','退出','Call','close(hf)');六、实验总结通过对图形用户界面实验的练习,自己对这方面有了一个初步的认识。
用MATLAB制作图形用户界面
用MATLAB制作图形用户界面MATLAB是一种流行的科学计算软件,它不仅在数值计算和数据分析领域有着广泛的应用,还提供了一种高效的界面设计工具,使得用户可以自定义和制作自己的图形用户界面(GUI)。
通过创建自定义的GUI,用户可以简化复杂操作,提高工作效率,下面就让我们来学习如何用MATLAB制作图形用户界面。
MATLAB的图形用户界面主要由以下几部分组成:窗口:窗口是GUI的基本元素,它提供了一个空间,用户可以在其中添加和组织各种控件(如按钮、文本框等)。
控件:控件是GUI中的基本元素,它们可以接收用户的输入,并在窗口中显示出来。
例如,按钮、文本框、滑动条等都是常见的控件。
菜单:菜单是GUI中的一种导航工具,它们可以链接到其他窗口或者函数,方便用户进行操作。
工具栏:工具栏是GUI中的一种快速执行工具,它们提供了一键执行常见操作的快捷方式。
下面就让我们通过一个简单的例子来学习如何用MATLAB制作一个简单的图形用户界面:打开MATLAB,在命令窗口输入“guide”,并按Enter键。
这将打开GUI设计工具。
在打开的GUI设计工具中,选择“Blank GUI”并点击“OK”,进入GUI编辑器。
在GUI编辑器中,你可以看到一个空白的窗口和一些控件。
你可以通过拖拽的方式将这些控件添加到窗口中。
选中你添加的控件,在右侧的“Properties”面板中,你可以修改控件的属性,如颜色、字体、大小等。
在设计完成后,点击“Save”按钮,保存你的GUI。
此时,MATLAB会生成一个.fig文件和一个.m文件。
其中.fig文件是GUI的图形文件,而.m文件包含了GUI的代码。
在生成的.m文件中,你可以编写控件的事件处理函数。
例如,当用户点击按钮时,应该执行什么样的操作。
在编写完事件处理函数后,你就可以运行你的GUI了。
在命令窗口输入“edit(gcf)”,然后按Enter键,就可以打开你的GUI并进行测试了。
Matlab_-_GUI图形用户界面简单实用教程
五 GUI图形用户界面
4. 界面激活 保存静态界面后,利用工具栏上的运行按钮激活该界面。 激活后可以看到两个同名文件:experiment1.m和 experiment1.fig。 experiment1.m文件在M文本编辑器中打开, experiment1.fig文件显示为操作界面,但是无法实现任何功 能,需要编写回调函数。
15
五 GUI图形用户界面
对本例来说,首先需要定义几个用户变量,以便记录参加 handles = 运算的数值,进行计算。 mainWnd : 132.0002 p2 : 24.0006
Operation : 149.0002 p1 handles, : 23.0006 function Experiment1_OpeningFcn(hObject, eventdata, varargin) pDot : 148.0002 text3 : 22.0006 handles.output = hObject; pLog10 : 147.0002 text2 : 21.0006 handles.s_Exp=‘’; % 以字符串的形式记录计算表达式 pLog : 146.0002 frame4 : 20.0006 handles.s_Num=‘’; %以字符串的形式记录编辑框中要显示的数值 pCos : 145.0002 text1 : 19.0006 handles.i=1; % s_Exp的计数器 pClear : 18.0006 pSin : 144.0002 pDel : 143.0002 handles.j=1; % s_Num的计数器 pDone : 17.0006 pExp : 16.0006 handles.flag=0; pAdd : 142.0002 %用来区分四则运算和其他运算的标志 pDiv : 141.0002 frame3 : 15.0007 % Update handles structure pMul : 140.0002 frame2 : 133.0002 guidata(hObject, handles); p0 : 139.0002 p_Clear : 151.0002 p9 : 138.0002 p_Done : 150.0002 p8 : 137.0002 output : 132.0002 p7 : 136.0002 s_Exp : '50' p6 : 135.0002 s_Num : '5' p5 : 134.0002 i :2 p4 : 26.0006 j :2 p3 : 25.0006 flag : 0
Matlab实用程序界面设计实例分析
Matlab实用程序界面设计实例分析实例33:曲线转换按钮h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例33');x=0:0.5:2*pi;y=sin(x);h=plot(x,y);grid onhuidiao=[...'if i==1,',...'i=0;,',...'y=cos(x);,',...'delete(h),',...'set(hm,''string'',''正弦函数''),',...'h=plot(x,y);,',...'grid on,',...'else if i==0,',...'i=1;,',...'y=sin(x);,',...'set(hm,''string'',''余弦函数''),',...'delete(h),',...'h=plot(x,y);,',...'grid on,',...'end,',...'end'];hm=uicontrol(gcf,'style','pushbutton',...'string','余弦函数',...'callback',huidiao);i=1;set(hm,'position',[250 20 60 20]);set(gca,'position',[0.2 0.2 0.6 0.6]) title('按钮的使用')hold on实例34:栅格控制按钮h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例34');x=0:0.5:2*pi;y=sin(x);plot(x,y)huidiao1=[...'set(h_toggle2,''value'',0),',...'grid on,',...];huidiao2=[...'set(h_toggle1,''value'',0),',...'grid off,',...];h_toggle1=uicontrol(gcf,'style','togglebutton',...'string','grid on',...'value',0,...'position',[20 45 50 20],...'callback',huidiao1);h_toggle2=uicontrol(gcf,'style','togglebutton',...'string','grid off',...'value',0,...'position',[20 20 50 20],...'callback',huidiao2);set(gca,'position',[0.2 0.2 0.6 0.6])title('开关按钮的使用')实例35:编辑框的使用h0=figure('toolbar','none',...'position',[200 150 350 250],...'name','实例35');f='Please input the letter';huidiao1=[...'g=upper(f);,',...'set(h2_edit,''string'',g),',...];huidiao2=[...'g=lower(f);,',...'set(h2_edit,''string'',g),',...];h1_edit=uicontrol(gcf,'style','edit',...'position',[100 200 100 50],...'HorizontalAlignment','left',...'string','Please input the letter',...'callback','f=get(h1_edit,''string'');',...'background','w',...'max',5,...'min',1);h2_edit=uicontrol(gcf,'style','edit',...'HorizontalAlignment','left',...'position',[100 100 100 50],...'background','w',...'max',5,...'min',1);h1_button=uicontrol(gcf,'style','pushbutton',...'string','小写变大写',...'position',[100 45 100 20],...'callback',huidiao1);h2_button=uicontrol(gcf,'style','pushbutton',...'string','大写变小写',...'position',[100 20 100 20],...'callback',huidiao2);实例36:弹出式菜单h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例36');x=0:0.5:2*pi;y=sin(x);h=plot(x,y);grid onhm=uicontrol(gcf,'style','popupmenu',...'string',...'sin(x)|cos(x)|sin(x)+cos(x)|exp(-sin(x))',...'position',[250 20 50 20]);set(hm,'value',1)huidiao=[...'v=get(hm,''value'');,',...'switch v,',...'case 1,',...'delete(h),',...'y=sin(x);,',...'h=plot(x,y);,',...'grid on,',...'case 2,',...'delete(h),',...'y=cos(x);,',...'h=plot(x,y);,',...'grid on,',...'case 3,',...'delete(h),',...'y=sin(x)+cos(x);,',...'h=plot(x,y);,',...'grid on,',...'case 4,',...'delete(h),',...'y=exp(-sin(x));,',...'h=plot(x,y);,',...'grid on,',...'end'];set(hm,'callback',huidiao)set(gca,'position',[0.2 0.2 0.6 0.6]) title('弹出式菜单的使用')实例37:滑标的使用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例37');[x,y]=meshgrid(-8:0.5:8);r=sqrt(x.^2+y.^2)+eps;z=sin(r)./r;h0=mesh(x,y,z);h1=axes('position',...[0.2 0.2 0.5 0.5],...'visible','off');htext=uicontrol(gcf,...'units','points',...'position',[20 30 45 15],...'string','brightness',...'style','text');hslider=uicontrol(gcf,...'units','points',...'position',[10 10 300 15],...'min',-1,...'max',1,...'style','slider',...'callback',...'brighten(get(hslider,''value''))'); 实例38:多选菜单h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例38');[x,y]=meshgrid(-8:0.5:8);r=sqrt(x.^2+y.^2)+eps;z=sin(r)./r;h0=mesh(x,y,z);hlist=uicontrol(gcf,'style','listbox',...'string','default|spring|summer|autumn|winter',...'max',5,...'min',1,...'position',[20 20 80 100],...'callback',[...'k=get(hlist,''value'');,',...'switch k,',...'case 1,',...'colormap default,',...'case 2,',...'colormap spring,',...'case 3,',...'colormap summer,',...'case 4,',...'colormap autumn,',...'case 5,',...'colormap winter,',...'end']);实例39:菜单控制的使用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例39');x=0:0.5:2*pi;y=cos(x);h=plot(x,y);grid onset(gcf,'toolbar','none')hm=uimenu('label','example');huidiao1=[...'set(hm_gridon,''checked'',''on''),',...'set(hm_gridoff,''checked'',''off''),',...'grid on'];huidiao2=[...'set(hm_gridoff,''checked'',''on''),',...'set(hm_gridon,''checked'',''off''),',...'grid off'];hm_gridon=uimenu(hm,'label','grid on',...'checked','on',...'callback',huidiao1);hm_gridoff=uimenu(hm,'label','grid off',...'checked','off',...'callback',huidiao2);实例40:UIMENU菜单的应用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例40');h1=uimenu(gcf,'label','函数');h11=uimenu(h1,'label','轮廓图',...'callback',[...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off''),',...'[x,y,z]=peaks;,',...'contour3(x,y,z,30)']);h12=uimenu(h1,'label','高斯分布',...'callback',[...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off''),',...'mesh(peaks);,',...'axis tight']);h13=uimenu(h1,'label','Sinc函数',...'callback',[...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off''),',...'[x,y]=meshgrid(-8:0.5:8);,',...'r=sqrt(x.^2+y.^2)+eps;,',...'z=sin(r)./r;,',...'mesh(x,y,z)']);h2=uimenu(gcf,'label','色彩');hl2(1)=uimenu(h2,'label','Default',...'checked','on',...'callback',...[...'set(hl2,''checked'',''off''),',...'set(hl2(1),''checked'',''on''),',...'colormap(''default'')']);hl2(2)=uimenu(h2,'label','spring',...'callback',...[...'set(hl2,''checked'',''off''),',...'set(hl2(2),''checked'',''on''),',...'colormap(spring)']);hl2(3)=uimenu(h2,'label','Summer',...'callback',...[...'set(hl2,''checked'',''off''),',...'set(hl2(3),''checked'',''on''),',...'colormap(summer)']);hl2(4)=uimenu(h2,'label','Autumn',...'callback',...[...'set(hl2,''checked'',''off''),',...'set(hl2(4),''checked'',''on''),',...'colormap(autumn)']);hl2(5)=uimenu(h2,'label','Winter',...'callback',...[...'set(hl2,''checked'',''off''),',...'set(hl2(5),''checked'',''on''),',...'colormap(winter)']);h3=uimenu(gcf,'label','坐标选项');h31=uimenu(h3,'label','Axis on',...'callback',...[...'axis on,',...'set(h31,''checked'',''on''),',...'set(h32,''checked'',''off'')']); h32=uimenu(h3,'label','Axis off',...'callback',...[...'axis off,',...'set(h32,''checked'',''on''),',...'set(h31,''checked'',''off'')']); 实例41:除法计算器h=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例41');h1=uicontrol(gcf,'style','edit',...'position',[80 200 100 20],...'HorizontalAlignment','right',...'callback',['m=get(h1,''string'');,',...'a=str2num(m);']);h2=uicontrol(gcf,'style','edit',...'HorizontalAlignment','right',...'position',[80 150 100 20],...'callback',['n=get(h2,''string'');,',...'b=str2num(n);']);h3=uicontrol(gcf,'style','text',...'string','被除数',...'position',[80 230 100 20]);h4=uicontrol(gcf,'style','edit',...'position',[80 50 100 20]);h5=uicontrol(gcf,'style','pushbutton',...'position',[80 100 100 20],...'string','=',...'callback',[...'if b==0,',...'h7=errordlg(''除数不能为0!'',''error'',''on'');,',...'else,',...'k=a/b;,',...'c=num2str(k);,',...'set(h4,''string'',c),',...'end']);h8=uicontrol(gcf,'style','text',...'string','除数',...'position',[80 175 100 20]);h9=uicontrol(gcf,'style','text',...'string','商',...'position',[80 75 100 20]);实例42:单选框的使用h0=figure('toolbar','none',...'position',[200 150 450 250],...'name','实例42');x=0:0.5:2*pi;y=sin(x);plot(x,y)grid onset(gcf,'toolbar','none')g=set(gca,'position',[0.2 0.2 0.6 0.6]); huidiao1=[...'grid on,',...'set(box_on,''value'',1),',...'set(box_off,''value'',0),']; huidiao2=[...'grid off,',...'set(box_off,''value'',1),',...'set(box_on,''value'',0),']; box_on=uicontrol(gcf,'style','radio',...'position',[5 50 50 20],...'string','grid on',...'value',1,...'callback',huidiao1);box_off=uicontrol(gcf,'style','radio',...'position',[5 20 50 20],...'string','grid off',...'value',0,...'callback',huidiao2);title('无线按钮的使用')实例43:添加环境效果h0=figure('toolbar','none',...'position',[198 56 450 468],...'name','实例43');h1=axes('parent',h0,...'position',[0.15 0.45 0.7 0.5],...'visible','off');sphereh=findobj('type','surface');shading interpaxis equall=light('position',[0 -2 1]);k(1)=get(h,'specularstrength');k(2)=get(h,'diffusestrength');k(3)=get(h,'specularexponent');k(4)=get(h,'specularcolorreflectance');u1=uimenu('parent',h0,...'label','灯光效果',...'tag','u1',...'backgroundcolor',[0.75 0.75 0.75]);u11=uimenu('parent',u1,...'label','gouraud',...'tag','u11',...'backgroundcolor',[0.75 0.75 0.75],...'callback',[...'set(u11,''checked'',''on'');,',...'set(u12,''checked'',''off'');,',...'set(h,''facelighting'',''gouraud'')']); u12=uimenu('parent',u1,...'label','phong',...'tag','u12',...'backgroundcolor',[0.75 0.75 0.75],...'callback',[...'set(u11,''checked'',''off'');,',...'set(u12,''checked'',''on'');,',...'set(h,''facelighting'',''gouraud'')']);u2=uimenu('parent',h0,...'label','背面灯光',...'tag','u2',...'backgroundcolor',[0.75 0.75 0.75]);u21=uimenu('parent',u2,...'label','reverselit',...'tag','u21',...'checked','on',...'backgroundcolor',[0.75 0.75 0.75],...'callback',[...'set(u21,''checked'',''on'');,',...'set(u22,''checked'',''off'');,',...'set(h,''backfacelighting'',''reverselit'')']); u22=uimenu('parent',u2,...'label','reverselit',...'tag','u22',...'backgroundcolor',[0.75 0.75 0.75],...'callback',[...'set(u21,''checked'',''off'');,',...'set(u22,''checked'',''on'');,',...'set(h,''backfacelighting'',''reverselit'')']);s1=uicontrol('parent',h0,...'units','points',...'style','slider',...'tag','s1',...'min',0,...'max',1,...'value',k(1),...'position',[20 80 100 15],...'callback',[...'s1value=get(s1,''value'');,',...'set(h,''specularstrength'',s1value)']); t1=uicontrol('parent',h0,...'units','points',...'style','text',...'tag','t1',...'string','镜面反射强度',...'position',[20 97 100 15]);s2=uicontrol('parent',h0,...'units','points',...'style','slider',...'tag','s2',...'min',0,...'max',1,...'value',k(2),...'position',[20 30 100 15],...'callback',[...'s2value=get(s2,''value'');,',...'set(h,''diffusestrength'',s2value)']); t2=uicontrol('parent',h0,...'units','points',...'style','text',...'tag','t2',...'string','漫反射强度',...'position',[20 47 100 15]);s3=uicontrol('parent',h0,...'units','points',...'style','slider',...'tag','s3',...'min',0.1,...'max',1,...'value',k(3)/20,...'position',[220 80 100 15],...'callback',[...'s3value=get(s3,''value'')+eps;,',...'set(h,''specularexponent'',20*s3value)']);t3=uicontrol('parent',h0,...'units','points',...'style','text',...'tag','t3',...'string','镜面指数',...'position',[220 97 100 15]);s4=uicontrol('parent',h0,...'units','points',...'style','slider',...'tag','s4',...'min',0,...'max',1,...'value',k(4),...'position',[220 30 100 15],...'callback',[...'s4value=get(s4,''value'');,',...'set(h,''specularcolorreflectance'',s4value)']); t4=uicontrol('parent',h0,...'units','points',...'style','text',...'tag','t1',...'string','镜面颜色反射比',...'position',[220 47 100 15]);b1=uicontrol('parent',h0,...'units','points',...'style','pushbutton',...'tag','b1',...'string','关闭',...'position',[145 45 50 30],...'callback','close');实例44:改变坐标轴范围h0=figure('toolbar','none',...'position',[198 56 408 468],...'name','实例44');h1=axes('parent',h0,...'position',[0.15 0.45 0.7 0.5],...'visible','on');e1=uicontrol('parent',h0,...'style','edit',...'string',1,...'position',[50 120 50 20]);t1=uicontrol('parent',h0,...'style','text',...'string','X轴最小值',...'position',[35 150 80 20]); e2=uicontrol('parent',h0,...'style','edit',...'string',5,...'position',[50 60 50 20]); t2=uicontrol('parent',h0,...'style','text',...'string','X轴最大值',...'position',[35 90 80 20]); e3=uicontrol('parent',h0,...'style','edit',...'string',1,...'position',[150 120 50 20]); t3=uicontrol('parent',h0,...'style','text',...'string','Y轴最小值',...'position',[135 150 80 20]); e4=uicontrol('parent',h0,...'style','edit',...'string',5,...'position',[150 60 50 20]);t4=uicontrol('parent',h0,...'style','text',...'string','Y轴最大值',...'position',[135 90 80 20]);e5=uicontrol('parent',h0,...'style','edit',...'string',20,...'position',[250 120 50 20]);t5=uicontrol('parent',h0,...'style','text',...'horizontalalignment','left',...'string','点数',...'position',[250 150 30 20]);b1=uicontrol('parent',h0,...'style','pushbutton',...'string','绘图',...'position',[250 60 60 40],...'callback',[...'a=str2num(get(e1,''string''));,',...'b=str2num(get(e2,''string''));,',...'c=str2num(get(e3,''string''));,',...'d=str2num(get(e4,''string''));,',...'n=str2num(get(e5,''string''));,',...'xgrid=linspace(-abs(a),abs(a),n);,',...'ygrid=linspace(-abs(b),abs(b),n);,',...'[x,y]=meshgrid(xgrid,ygrid);,',...'z=c*sqrt(d-y.*y/b/b-x.*x/a/a);,',...'u=1;,',...'z1=real(z);,',...'for k=2:n-1,',...'for j=2:n-1,',...'if imag(z(k,j))~=0,',...'z1(k,j)=0;,',...'end,',...'if all(imag(z([k-1:k+1],[j-1:j+1])))~=0,',... 'z1(k,j)=nan;,',...'end,',...'end,',...'end,',...'surf(x,y,z1),',...'hold on,',...'if u==1,',...'z2=-z1;,',...'surf(x,y,z2),',...'axis([-abs(a),abs(a),-abs(b),abs(b),-abs(c),abs(c)]);,',...'end,',...'xlabel(''x'');,',...'ylabel(''y'');,',...'zlabel(''z'');,',...'hold off']);b2=uicontrol('parent',h0,...'style','pushbutton',...'string','关闭',...'position',[150 10 60 20],...'callback','close');实例45:简单运算器h1=uicontrol(gcf,'style','radio',...'string','加',...'value',1,...'position',[20 150 40 20],...'callback',[...'k=1;,',...'set(h1,''value'',1),',...'set(h2,''value'',0),',...'set(h3,''value'',0)']); h2=uicontrol(gcf,'style','radio',...'string','减',...'position',[20 110 40 20],...'callback',[...'k=2;,',...'set(h2,''value'',1),',...'set(h1,''value'',0),',...'set(h3,''value'',0)']); h3=uicontrol(gcf,'style','radio',...'string','乘',...'position',[20 70 40 20],...'callback',[...'k=3;,',...'set(h3,''value'',1),',...'set(h2,''value'',0),',...'set(h1,''value'',0)']); e1=uicontrol(gcf,'style','edit',...'position',[80 150 100 20]); e2=uicontrol(gcf,'style','edit',...'position',[80 110 100 20]); e3=uicontrol(gcf,'style','edit',...'position',[80 70 100 20]);b1=uicontrol(gcf,'style','pushbutton',...'string','运算',...'position',[200 150 80 30],...'callback',[...'x=str2num(get(e1,''string''));,',...'y=str2num(get(e2,''string''));,',...'switch k,',...'case 1,',...'z=x+y;,',...'case 2,',...'z=x-y;,',...'case 3,',...'z=x*y;,',...'end,',...'set(e3,''string'',num2str(z))']); b2=uicontrol(gcf,'style','pushbutton',...'string','退出',...'position',[200 100 80 30],...'callback','close');实例46:曲线色彩的修改h0=figure('toolbar','none',...'position',[198 56 408 468],...'name','my second gui');h1=axes('parent',h0,...'position',[0.15 0.45 0.7 0.5],...'visible','on');x=0:0.1:2*pi;k=plot(x,sin(x));xlabel('自变量X');ylabel('函数值Y');title('图形色彩改变');p1=uicontrol('parent',h0,...'style','pushbutton',...'backgroundcolor','r',...'position',[60 100 50 30],...'callback','set(k,''color'',''r'')'); p2=uicontrol('parent',h0,...'style','pushbutton',...'backgroundcolor','g',...'position',[170 100 50 30],...'callback','set(k,''color'',''g'')'); p3=uicontrol('parent',h0,...'style','pushbutton',...'backgroundcolor','b',...'position',[280 100 50 30],...'callback','set(k,''color'',''b'')'); p4=uicontrol('parent',h0,...'style','pushbutton',...'backgroundcolor',[1 1 1],...'fontsize',20,...'fontweight','demi',...'string','关闭',...'position',[150 30 80 60],...'callback','close');t1=uicontrol('parent',h0,...'style','text',...'string','红色',...'fontsize',12,...'fontweight','demi',...'position',[60 120 50 20]);t2=uicontrol('parent',h0,...'style','text',...'string','绿色',...'fontsize',12,...'fontweight','demi',...'position',[170 120 50 20]);t3=uicontrol('parent',h0,...'style','text',...'string','蓝色',...'fontsize',12,...'fontweight','demi',...'position',[280 120 50 20]);实例47:曲线标记h0=figure('toolbar','none',...'position',[198 56 408 468],...'name','my second gui');h1=axes('parent',h0,...'position',[0.15 0.45 0.7 0.5],...'visible','on');x=0:0.1:2*pi;k=plot(x,sin(x),'*');xlabel('自变量X');ylabel('函数值Y');title('标记类型的改变');p1=uicontrol('parent',h0,...'style','pushbutton',...'string','+',...'fontsize',20,...'foregroundcolor',[1 1 1],...'backgroundcolor',[0 0 0],...'position',[60 100 50 20],...'callback','set(k,''marker'',''+'')'); p2=uicontrol('parent',h0,...'style','pushbutton',...'string','o',...'fontsize',20,...'foregroundcolor',[1 1 1],...'backgroundcolor',[0 0 0],...'position',[170 100 50 20],...'callback','set(k,''marker'',''o'')'); p3=uicontrol('parent',h0,...'style','pushbutton',...'string','x',...'fontsize',20,...'foregroundcolor',[1 1 1],...'backgroundcolor',[0 0 0],...'position',[280 100 50 20],...'callback','set(k,''marker'',''x'')'); p4=uicontrol('parent',h0,...'style','pushbutton',...'backgroundcolor',[1 1 1],...'fontsize',20,...'fontweight','demi',...'string','关闭',...'position',[150 30 80 60],...'callback','close');t1=uicontrol('parent',h0,...'style','text',...'string','星号',...'fontsize',12,...'fontweight','demi',...'position',[60 120 50 20]);t2=uicontrol('parent',h0,...'style','text',...'string','圆圈',...'fontsize',12,...'fontweight','demi',...'position',[170 120 50 20]);t3=uicontrol('parent',h0,...。
MATLAB实用教程GUI
MATLAB实用教程GUI
MATLAB是一种非常强大的数值计算软件,广泛应用于科学计算、工程设计和数据分析等领域。
其中的GUI(Graphical User Interface,图形用户界面)功能可以帮助用户设计出直观、交互性强的界面,提高使用效率和易用性。
本篇教程将介绍如何利用MATLAB的GUI功能创建一个实用的界面。
首先,打开MATLAB软件,并在"Home"选项卡中选择"New Script"创建一个新的脚本。
在脚本中,我们将使用MATLAB的GUI工具箱中的"App Designer"来创建界面。
除了按钮的点击事件外,还可以处理其他各种事件。
例如,通过为文本框添加"ValueChangedFcn"回调函数,可以在文本框内容发生更改时执行相应的操作。
在界面设计完成后,可以通过点击"Run"按钮来运行应用程序,并与用户进行交互。
可以输入文本、选择菜单项、点击按钮等等,然后根据用户的输入做出相应的反应。
通过与用户的交互,可以进行各种有用的计算和处理。
值得一提的是,MATLAB的GUI功能还支持将用户界面保存为独立的应用程序,并与其他MATLAB代码集成。
这意味着界面所包含的各种计算和分析能力可以通过编写MATLAB函数来实现,然后在界面的回调函数中调用这些函数。
这为用户提供了更大的自由度和灵活性,以满足不同需求的应用场景。
Matlab界面设计的例子
1、很简单,在界面上放三个单选按钮控制颜色(R、G、B),四个pushbutton (功能分别为绘制正弦、余弦、grid off、退出程序),可作为一个小小的入门。
程序为:%simpleGUI2.m-a simple use of Radiobutton and Pushbuttonclear all;FigWin=figure('Position',[100,100,600,300],'Name','Uicontrol:Push Button & RadioButton',...'NumberTitle','off');AxesHandle=axes('Position',[0.4,0.15,0.5,0.8],'Box','on');RadioNum=3;for i=1:RadioNumRadio(i)=0;%initial value=0endRadio(1)=uicontrol(FigWin,...%父对象FigWin(一figure对象),备注③'Style','Radio',...'Position',[50 255 100 30],...'String','Draw in Red',...'CallBack',...['n=1;'...'if get(Radio(1),''Value'')==1;'...%要使各radio button之间具有互斥性,要用if...else语句'set(Radio([1:(n-1),(n+1):RadioNum]),''Value'',0);'...'else;'...%要加上分号,一种规定?参备注①'set(Radio(1),''Value'',1);'...'end;'...'ColorStr=''r'';'...'set(FunHandle,''Color'',''red'')']);%曲线颜色根据radio button的选项实时变化,ColorStr是一个全局变量Radio(2)=uicontrol(FigWin,...'Style','Radio',...'Position',[50 215 100 30],...'String','Draw in Green',...'CallBack',...['n=2;'...'if get(Radio(2),''Value'')==1;'...'set(Radio([1:(n-1),(n+1):RadioNum]),''Value'',0);'...'else;'...'set(Radio(2),''Value'',1);'...'end;'...'ColorStr=''g'';'...'set(FunHandle,''Color'',''green'')']);Radio(3)=uicontrol(FigWin,...'Style','Radio',...'Position',[50 175 100 30],...'String','Draw in Blue',...'CallBack',...['n=3;'...'if get(Radio(3),''Value'')==1;'...'set(Radio([1:(n-1),(n+1):RadioNum]),''Value'',0);'...'else;'...'set(Radio(3),''Value'',1);'...'end;'...'ColorStr=''b'';'...'set(FunHandle,''Color'',''blue'')']);push1=uicontrol(FigWin,...'Style','pushbutton',...'Position',[50 135 100 30],...'String','Plot sin(x)',...'CallBack',...['subplot(AxesHandle);' ...%注意父对象是AxesHandle而非FigWin!参备注②'x=0:.1:4*pi;'...'FunHandle=plot(x,sin(x),ColorStr);'...%ColorStr变量的值受radiobutton控制'axis([0 4*pi -1 1]);'...'grid on;'...'xlabel(''x'');'...'ylabel(''y=sin(x)'');']);push2=uicontrol(FigWin,...'Style','pushbutton',...'Position',[50 95 100 30],...'String','Plot cos(x)',...'CallBack',...['subplot(AxesHandle);' ...'x=0:.1:4*pi;'...'FunHandle=plot(x,cos(x),ColorStr);'... 'axis([0 4*pi -1 1]);'...'grid on;'...'xlabel(''x'');'...'ylabel(''y=cos(x)'');']);push3=uicontrol(FigWin,...'Style','pushbutton',...'Position',[50 55 100 30],...'String','Grid off',...'CallBack','grid off;');%参备注①push4=uicontrol(FigWin,...'Style','pushbutton',...'Position',[50 15 100 30],...'String','Exit',...'CallBack','close(FigWin)');%绘制初始曲线ColorStr='r';set(Radio(1),'Value',1);X=0:0.1:4*pi;FunHandle=plot(X,sin(X),ColorStr); axis([0 4*pi -1 1]);xlabel('x');ylabel('y=sin(x)');grid on;运行结果://有些注意的地方用红色标识。
实验六 MATLAB图形用户界面设计
实验六MATLAB图形用户界面设计(3学时)1 实验的目的及意义:(1)熟悉MATLAB图形用户界面开发环境。
(2)掌握MATLAB中图形用户界面程序设计方法。
2 实验步骤:上机调试①设计如下图所示的简单四则运算计算器。
1) 在GUI设计窗口中放置16个Pushbutton控件,将其Tag和String属性分别设置为:Pushbutton1,1Pushbutton2,2……Pushbutton9,9Pushbutton10,0Pushbutton_CLR,CLRPushbutton_EQU,=Pushbutton_ADD,+Pushbutton_SUB,-Pushbutton_MUL,×Pushbutton_DIV,÷2) 在GUI设计窗口中放置2个Statictext控件,将其Tag和String属性分别设置为:Text1,计算器Text_ANS,0再将Text_ANS控件的Backgroundcolor属性设置为白色;HorizontalAlignment属性设置为Left(水平左对齐)。
3) 设计Callback函数:(提示)某一数字按键按下时,要将该按键的String属性读出来并连接到Text_ANS的String属性之后。
(使用字符串连接函数Strcat)function pushbutton1_Callback(hObject, eventdata, handles) str=get(handles.pushbutton1,'string');str=strcat(get(handles.text_ANS,'string'),str);set(handles.text_ANS,'string',str);function pushbutton2_Callback(hObject, eventdata, handles) str=get(handles.pushbutton2,'string');str=strcat(get(handles.text_ANS,'string'),str);set(handles.text_ANS,'string',str);....function pushbutton9_Callback(hObject, eventdata, handles) str=get(handles.pushbutton9,'string');str=strcat(get(handles.text_ANS,'string'),str);set(handles.text_ANS,'string',str);function pushbutton10_Callback(hObject, eventdata, handles) str=get(handles.pushbutton10,'string');str=strcat(get(handles.text_ANS,'string'),str);set(handles.text_ANS,'string',str);CLR按键按下时,将Text_ANS的String属性设为空。
利用Matlab的图形用户界面(GUI)功能,设计与实现实验.
(1 利用Matlab 的图形用户界面(GUI )功能,设计与实现实验主界面;(2 实现在“数值计算”图形用户界面中的各项数值计算,如实现Matlab 的线性方程组的求解、数据统计与分析、数值插值、曲线拟合、常微分方程的数值求解等数值计算;(3 利用Matlab 的二维、三维绘图功能,实现图形用户界面(GUI )中的数值计算的可视化,即给出数值计算实例的同时实现该实例的图形化描述。
如下图给出了一个简单的GUI 界面,学生可以参考如下图设计出自己的GUI 界面。
figure('Color' ,[1,1,1],'Position' ,[100,100,700,600],...'Name' , '' , ...'NumberTitle' , 'off' , 'MenuBar' , 'none' ;uicontrol('Style' , 'Frame' , 'Position' ,[0,0.08,0.45,1],...'Units' , 'normalized' , 'Back' ,[0,1,1];XIANQIU=['a=str2num(get(xishu,''String'';', ...'b=str2num(get(changshu,''String'';', ...'b=b'';x=a\b;', ...'set(jieguo,''string'',x;'];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.92,0.20,0.06],...'String' , 'ÏßÐÔ·½³Ì×éÇó½â', 'Units' , 'normalized' , 'Call' ,XIANQIU;uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.83,0.1,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'ϵÊý¾ØÕó', 'Back' ,[0,1,1];xishu=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.83,0.25,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.72,0.1,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , '³£ÊýÏî¾ØÕó', 'Back' ,[0,1,1];changshu=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.72,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.63,0.20,0.06],... 'String' ,'Êýֵͳ¼ÆÓë·ÖÎö';uicontrol('Style' , 'Text' , 'Position' ,[0.23,0.63,0.2,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'ÔÚϵÊý¾ØÕóÊäÈë¿òÖÐÊäÈëÒª·ÖÎöµÄ¾ØÕó', 'Back' ,[0,1,1];uicontrol('Style' , 'Push' , 'Position' ,[0.06,0.55,0.1,0.05],... 'String' , 'ÊýÖµ²åÖµ';uicontrol('Style' , 'Push' , 'Position' ,[0.22,0.55,0.1,0.05],... 'String' , 'ÇúÏßÄâºÏ';uicontrol('Style' , 'Text' , 'Position' ,[0.005,0.45,0.05,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'X' , 'Back' ,[0,1,1];chazhi=uicontrol('Style' , 'Edit' , 'Position' ,[0.05,0.45,0.15,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.2,0.45,0.05,0.05],... 'Units' , 'normalized' , 'Horizontal' , 'center' , ...'String' , 'Y' , 'Back' ,[0,1,1];nihe=uicontrol('Style' , 'Edit' , 'Position' ,[0.25,0.45,0.15,0.06],... 'Units' ,'normalized' , 'Back' ,[0,1,0];XIANXING=['s=(get(changwei,''String'';', ...'c=(get(tiaojian,''String'';', ...'c_f=dsolve(''s'',''b'',''x'';', ...'set(jieguo,''string'',char(c_f;'];uicontrol('Style' , 'Push' , 'Position' ,[0.02,0.35,0.25,0.06],...'String' , '³£Î¢·Ö·½³ÌÊýÖµÇó½â', 'Units' , 'normalized' , 'Call' ,XIANXING;chengwei=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.25,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.25,0.1,0.05],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '΢·Ö·½³Ì', 'Back' ,[0,1,1];tiaojian=uicontrol('Style' , 'Edit' , 'Position' ,[0.16,0.15,0.25,0.06],.. .'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.01,0.15,0.1,0.05],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '³õÖµÌõ¼þ', 'Back' ,[0,1,1];h_axes=axes('position' ,[0.5,0.15,0.4,0.4];jieguo=uicontrol('Style' , 'text' , 'Position' ,[0.5,0.6,0.45,0.25],... 'Units' , 'normalized' , 'Back' ,[0,1,0];uicontrol('Style' , 'Text' , 'Position' ,[0.6,0.85,0.3,0.1],... 'Units' , 'normalized' ,'Horizontal' , 'center' , ...'String' , '½á¹û', 'Back' ,[1,1,1],'FontSize' ,35;uicontrol('Style' , 'Push' , 'Position' ,[0.018,0.02,0.08,0.05],... 'String' , 'Í˳ö', 'Units' , 'normalized' , 'Call' , 'close' ;uicontrol('Style' , 'Push' , 'Position' ,[0.65,0.025,0.08,0.05],...'String' , '°¡Êµ´òʵ', 'Units' , 'normalized' , 'Call' , '»æͼº¯Êý°´Å¥';。
matlab图形用户界面编程
Matlab菜单系统设计
菜单系统的生成 菜单项句柄=uimenu(窗口句柄,属性1,属性值1,属 性2,属性值2,…) 子菜单句柄=uimenu(菜单项句柄,属性1,属性值 1,…) 属性:
菜单条名称label 回调函数callback
热键名称accelerator 背景颜色backgroundcolor 前景颜色foregroundcolor 选中状态checked 使能状态enabled 菜单条位置position 分隔符separator
function gui_counter1() %gui_counter is a demo of gui design. 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',['h=findobj(gcf,''tag'',''myedit'');','v=eval(get(h,''string''));',... 'set(h,''string'',int2str(v+1));']); h_but2=uicontrol('style','pushbutton','position',[80 50 50 20],'string','DEC',... 'callback',['h=findobj(gcf,''tag'',''myedit'');','v=eval(get(h,''string''));',... 'set(h,''string'',int2str(v-1));']);
源码-一个实例搞定MATLAB界面编程 pjimage.m
% Get default command line output from handles structure
varargout{1} = handles.output;
% --------------------------------------------------------------------
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before pjimage_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% varargin command line arguments to pjimage (see VARARGIN)
% Choose default command line output for pjimage
handles.output = hObject;
% Update handles structure
function m_file_Callback(hObject, eventdata, handles)
% hObject handle to m_file (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% imshow(imread(fpath)) %imread读入图片,imshow显示
img_src=imread(fpath);
第08章_MATLAB图形用户界面设计_例题源程序
第8章MATLAB图形用户界面设计例8.1建立图8.1所示的图形演示系统菜单。
菜单条中含有3个菜单项:Plot、Option 和Quit。
Plot中有Sine Wave和Cosine Wave两个子菜单项,分别控制在本图形窗口画出正弦和余弦曲线。
Option菜单项的内容如图8.1所示,其中Grid on和Grid off控制给坐标轴加网格线,Box on和Box off控制给坐标轴加边框,而且这4项只有在画有曲线时才是可选的。
Window Color控制图形窗口背景颜色。
Quit控制是否退出系统。
screen=get(0,'ScreenSize');W=screen(3);H=screen(4);figure('Color',[1,1,1],'Position',[0.2*H,0.2*H,0.5*W,0.3*H],...'Name','图形演示系统','NumberTitle','off','MenuBar','none');%定义Plot菜单项hplot=uimenu(gcf,'Label','&Plot');uimenu(hplot,'Label','Sine Wave','Call',...['t=-pi:pi/20:pi;','plot(t,sin(t));',...'set(hgon,''Enable'',''on'');',...'set(hgoff,''Enable'',''on'');',...'set(hbon,''Enable'',''on'');',...'set(hboff,''Enable'',''on'');']);uimenu(hplot,'Label','Cosine Wave','Call',...['t=-pi:pi/20:pi;','plot(t,cos(t));',...'set(hgon,''Enable'',''on'');',...'set(hgoff,''Enable'',''on'');',...'set(hbon,''Enable'',''on'');',...'set(hboff,''Enable'',''on'');']);%定义Option菜单项hoption=uimenu(gcf,'Label','&Option');hgon=uimenu(hoption,'Label','&Grid on',...'Call','grid on','Enable','off');hgoff=uimenu(hoption,'Label','&Grid off',...'Call','grid off','Enable','off');hbon=uimenu(hoption,'Label','&Box on',...'separator','on','Call','box on','Enable','off');hboff=uimenu(hoption,'Label','&Box off',...'Call','box off','Enable','off');hwincor=uimenu(hoption,'Label','&Window Color','Separator','on');uimenu(hwincor,'Label','&Red','Accelerator','r',...'Call','set(gcf,''Color'',''r'');');uimenu(hwincor,'Label','&Blue','Accelerator','b',...'Call','set(gcf,''Color'',''b'');');uimenu(hwincor,'Label','&Yellow','Call',...'set(gcf,''Color'',''y'');');uimenu(hwincor,'Label','&White','Call',...'set(gcf,''Color'',''w'');');%定义Quit菜单项uimenu(gcf,'Label','&Quit','Call','close(gcf)');例8.2绘制曲线y=2e-0.5x sin(2πx),并建立一个与之相联系的快捷菜单,用以控制曲线的线型和曲线宽度。
matlab gui实例
matlab gui实例MATLAB GUI实例MATLAB GUI是一种基于图形用户界面的交互式工具,它可以帮助用户快速创建自己的图形界面,并且可以通过简单的拖放操作来实现各种功能。
在本文中,我们将介绍一个简单的MATLAB GUI实例,以帮助初学者更好地理解和掌握这一工具。
首先,我们需要创建一个新的MATLAB GUI。
在MATLAB主界面中,选择“新建”->“GUI”->“App Designer”,然后选择“Blank App”模板。
接下来,我们需要添加一些基本的组件,例如按钮、文本框和列表框。
这些组件可以通过拖放操作从左侧的“组件”面板中添加到GUI窗口中。
在本例中,我们将创建一个简单的计算器应用程序,用户可以通过输入两个数字和选择一个操作符来计算结果。
因此,我们需要添加两个文本框用于输入数字,一个列表框用于选择操作符,一个按钮用于触发计算操作,并且一个文本框用于显示结果。
这些组件可以通过以下代码添加到GUI窗口中:```matlabclassdef Calculator < matlab.apps.AppBase% Properties that correspond to app componentsproperties (Access = public)UIFigure matlab.ui.FigureNumber1EditField matlab.ui.control.NumericEditField Number2EditField matlab.ui.control.NumericEditField OperatorListBox matlab.ui.control.ListBoxCalculateButton matlab.ui.control.ButtonResultEditField matlab.ui.control.NumericEditField end% Callbacks that handle component eventsmethods (Access = private)% Button pushed function: CalculateButtonfunction CalculateButtonPushed(app, event)% Get the input valuesnum1 = app.Number1EditField.Value;num2 = app.Number2EditField.Value;op = app.OperatorListBox.Value;% Calculate the resultswitch opcase '+'result = num1 + num2;case '-'result = num1 - num2;case '*'result = num1 * num2;case '/'result = num1 / num2;end% Display the resultapp.ResultEditField.Value = result; endend% App initialization and constructionmethods (Access = private)% Create UIFigure and componentsfunction createComponents(app)% Create UIFigure and set propertiesapp.UIFigure = uifigure('Name', 'Calculator');app.UIFigure.Position = [100 100 640 480];% Create Number1EditFieldapp.Number1EditField = uieditfield(app.UIFigure,'numeric');app.Number1EditField.Position = [50 400 100 22];% Create Number2EditFieldapp.Number2EditField = uieditfield(app.UIFigure,'numeric');app.Number2EditField.Position = [200 400 100 22];% Create OperatorListBoxapp.OperatorListBox = uilistbox(app.UIFigure);app.OperatorListBox.Items = {'+', '-', '*', '/'};app.OperatorListBox.Position = [350 400 100 80];app.OperatorListBox.Value = '+';% Create CalculateButtonapp.CalculateButton = uibutton(app.UIFigure, 'push'); app.CalculateButton.ButtonPushedFcn = createCallbackFcn(app, @CalculateButtonPushed, true);app.CalculateButton.Position = [500 400 100 22];app.CalculateButton.Text = 'Calculate';% Create ResultEditFieldapp.ResultEditField = uieditfield(app.UIFigure, 'numeric'); app.ResultEditField.Position = [50 300 100 22];app.ResultEditField.Value = 0;endend% App creation and deletionmethods (Access = public)% Construct appfunction app = Calculator% Create UIFigure and componentscreateComponents(app);% Show the figure after all components are createdapp.UIFigure.Visible = 'on';endendend```在上面的代码中,我们定义了一个名为“Calculator”的类,它继承自“matlab.apps.AppBase”类。
MATLABGUI入门实例详解,让你轻松掌握GUI
MATLAB GU入门实例详解,让你轻松掌握GUI Matlab实例讲解本文档通过一个简单的实例让你学会matlab GUI的制作流程。
首先,图形用户界面GUI(Graphical User In terfaces) 是一种用户和计算机进行信息交流的工具和方法,由各种图形对象组成。
在这种用户界面下,用户的命令和对程序的控制是通过鼠标等输入设备“选择”各种图形对象来实现的。
开发者只需在由软件开发工具自动生成的程序代码中添加自己的运算或控制代码,就可以完成应用程序的设计。
例建立加法计算器程序步骤:1(新建一个GUI文件:选择Blank GUI(Default) 2( 进入GUI开发环境以后添加两个编辑文本框,6个静态文本框,和一个按钮,布置如下图所示;(+ = 数据1绿色显示框等都是静态文本框)布置好各控件以后,就可以来为这些控件编写程序来实现两数相加的功能了■f Jx f □1*5阖backb one. County sta nding whe n Lieute nant, guerrilla activity beh ind en emy lines in the water zone of Wujia ng County border. I n early 1940,Chang Shen Liq un sectors Yu Qin gzhi is appo in ted to three district and three en emy Guard Capta in. Yu assumed office, the positive inno vati on gover nan ce, establishi ng in formati on line, master puppet performa nee. Three3(为数据1文本框添加代码点击上图所示红色方框,选择edit1_Callback,光标便立刻移到下面这段代码的位置。
MATLAB编程 讲义及实例
4.1程序流程语句
4.1程序流程语句
4.1.3 其他流程控制语句 1.break语句和continue语句 break语句用于终止循环的执行。当在循环体内执行 到该语句时,程序将跳出循环,继续执行循环语句 的下一语句。 continue语句控制跳过循环体中的某些语句。当在循 环体内执行到该语句时,程序将跳过循环体中所有 剩下的语句,继续下一次循环。
给定两个实数a、b,一个自然数n,求解当 n=1,…,10时所有的(a+b)^n和(a-b)^n。
4.1程序流程语句
4.1程序流程语句
4.1.1 选择结构 思考: 给出学生的百分制成绩,要求转化成成绩等级输 出,等级分为‘优秀’,‘良好’,‘中等’, ‘及格’.90分以上的为‘优秀’,80-89的为‘良 好’,70-79的为‘中等’,60-69的为‘及格’,其 他为’不及格’.
4.1程序流程语句
4.1程序流程语句
例:求[100,200]之间第一个能被21整除的整数。
4.1程序流程语句 4.1.3 其他流程控制语句 2.try语句 语句格式为: try 语句组1 catch 语句组2 end try语句先试探性执行语句组1,如果语 句组1在执行过程中出现错误,则将错误信息 赋给保留的lasterr变量,并转去执行语句组2。
例:利用函数的递归调用,求n!。 显然,求n!需要求(n-1)!,这时可采用递归调 用。递归调用函数文件factor.m如下:
§4.2 M命令文件和M函数文件
例 nargin用法示例。 x=[1:3]; y=[1;2;3]; charray(x) charray(x,y') charray(x,y,3)
程序2: 首先建立函数文件f2c.m。 function c=f2c(f) c=5*(f-32)/9
一个实例搞定MATLAB界面编程
那么如何来保存一副图片?用imwrite命 令 。但 imwrite命令的第一个参数就是你 读入的图片数据,也就是imread的返回值。这样的话,我们就要将 m_file_open_Callback中的程序做一点小小的改动。将最后一句 (imshow(imread(fpath))),更改为两句,如下: img_src=imread(fpath);imshow(img_src); 不仅如此,我们的保存菜单的Callback函数,如何去获得打开菜单的Callback 函数下的img_src变量呢?这里就要将img_src来作为一个共享的数据。许多界面 编程的朋友,喜欢用global声明。我个人不喜欢这样用,因为有更好的方法。那 就是用setappdata和getappdata两个函数。我们可以为界面上面的任何一个具有 Tag属性的空间添加应用程序数据。当然我比较喜欢将这些共享的应用程序数据 统一添加到Figure窗口上,因为这样容易记,如果一个控件一个,感觉不容易记 。 你在.m文件中会发现除了各个菜单项的Callback函数以外,还有两个函数: pjimage_OpeningFcn和pjimage_OutputFcn.而pjimage_OpeningFcn就相当于界 面的初始化函数,而pjimage_OutputFcn则是界面的输出函数,也就是当你不运 行fig,而调用.m文件时的返回值。 所以,我们要在pjimage_OpeningFcn中添加如下的程序,来共享这个img_src矩 阵。代码如下: setappdata(handles.figure_pjimage,’img_src’,0); 然后,在m_file_open_Callback函数的最后写上如下程序: setappdata(handles.figure_pjimage,’img_src’,img_src); 那么,我们在m_file_save_Callback函数中就可以像这样的来提取img_src,如 下: img_src=getappdata(handles.figure_pjimage,’img_src’); 那么保存的时候,自然会用到保存对话框了。要用保存对话框,就要用到 uiputfile函数了,具体的请用help uiputfile查看。 那么,保存菜单项下的程序(m_file_save_Callback),可以这样写: [filename, pathname] = uiputfile({'*.bmp','BMP files';'*.jpg;','JPG files'}, 'Pick an Image'); if isequal(filename,0) || isequal(pathname,0)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
做一个实例,搞定MATLAB界面编程2009-04-12 16:55作者:彭军带插图版本的pdf格式文件,请下载:/source/1144420一个实例搞定MATLAB界面编程作者:彭军邮件:pengjun@博客:/pengjun下面请跟我一步一步做一个图像处理的程序,如果您坚持做完这个实例,我想MATLAB界面编程对您而言,就没有什么难度了。
当然,我这里说的是,您首先要有一定的MATLAB编程基础。
还有,我的MATLAB版本是2008a。
在2008a以前的版本中没有工具栏编辑器,如果需要工具栏要手动写程序,这个我就不多讲了。
好了,废话少说,跟我来吧!1、在MATLAB的命令窗口(Command Window)中运行guide命令,来打开GUIDE界面,如下:2、然后,选择空模板(Blang GUI),点击OK,即可打开GUIDE的设计界面,如下:3、点击工具栏上的菜单编辑器(Menu Editor),打开菜单编辑器,如下:4、在Menu Bar中新建一个菜单项,名字为“文件”,其他设置请看下图:5、在“文件”菜单下添加菜单项:“打开”,“保存”,“退出”。
见下图:如果需要在菜单项“退出”上面添加一个分割线的话,选中“Separator above this item”就行了。
保存我的界面为pjimage.fig. 保存完毕之后,会自动打开pjimage.m文件,而我们所有的程序都是要写在这个M文件里面的。
在编程中,我们的每一个鼠标动作都对应一个Callback函数。
那么我们的菜单项也是如此的。
在界面上,单击鼠标右键选择“Property Inspector”,即可打开属性窗口。
当我们点击不同的控件时,其对应的属性都会在这里显示,我们可以进行修改。
最主要的属性莫过于Tag属性和String属性。
设置当前Figure窗口的Tag属性为:figure_pjimage,窗口的标题(Name属性)为:图像处理实例。
如下:然后,点击工具栏的保存按钮。
之后,点击工具栏的运行按钮(Run Figure)。
注意,工具栏的图标都会有提示的,像运行按钮的提示就是Run Figure. 我们会看到如下的界面:那说明,我们保存的.fig文件的目录不是当前目录,但是没关系啊,我们只要点击“Change Directory”来改变当前目录。
当然,如果你想把当前目录添加到MATLAB路径也可以,那就点击“Add to Path”就OK了。
我在这里推荐点击“Change Directory”,因为没有什么太大必要把其添加到MATLAB路径中,一般是工具箱需要添加或者我们的函数或程序写完了,而在MATLAB的命令窗口找不到我们的函数的时候,我们可以将函数或程序所在的目录添加到MATLAB路径。
总之吧,点那个按钮,要看个人的爱好了。
不管点击两个按钮的那一个按钮,都会正确的运行程序的。
我们的程序运行时的样子,是这样的:文件下面的菜单项和快捷键我们都能看到,但是我们没有写程序,所以就算点也没有什么响应。
还有如果不想设置快捷键,可以在Menu Editor中设置,只要把其选择为Ctrl+none就行了,如下:这样的话,保存项就没有了快捷键了。
我们可以通过上面的按钮“View”来查看该菜单项的响应函数,也就是Callback函数。
也可以在pjimage.m中看,比如保存的Tag属性是m_file_save,那么它对应的Callback函数的名字就是m_file_save_Callback。
依次类推了。
下面我们来写打开菜单项的函数,要打开一个图片,当然要用打开对话框了。
在界面编程中,打开对话框的函数是uigetfile. 关于它的详细的说明用help uigetfile命令查看。
下面是打开菜单的响应函数:function m_file_open_Callback(hObject, eventdata, handles) [filename, pathname] = uigetfile( ...{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png, *.jpeg)'; ...'*.*', 'All Files (*.*)'}, ...'Pick an image');保存.m文件,并运行程序。
点击“文件”下的“打开”,会打开如下的打开对话框:选择一个文件之后,程序中的filename就是你选择的文件的文件名,pathname 就是该文件所在的目录的路径。
比如:filename =5.jpg,pathname =C:\Documents and Settings\Administrator\My Documents\。
那么获得路径之后,我们要怎么样才能读入和显示一个图片呢?读入图片可以用imread函数,而显示可以在一个坐标轴上。
那么我们需要在界面上画上一个坐标轴,为了对比,我们画两个坐标轴,一个显示处理前,一个显示处理后的。
并且将处理前的坐标轴的Tag属性改为axes_src,处理后的坐标轴的Tag属性为axes_dst。
更改之后,保存。
如下:然后在m_file_open_Callback程序原来的基础上,再添加如下的程序:axes(handles.axes_src);%用axes命令设定当前操作的坐标轴是axes_src fpath=[pathname filename];%将文件名和目录名组合成一个完整的路径imshow(imread(fpath));%用imread读入图片,并用imshow在axes_src上显示运行程序,通过“打开”菜单项,打开一个图片。
效果如下:那么如何来保存一副图片?用imwrite命令。
但imwrite命令的第一个参数就是你读入的图片数据,也就是imread的返回值。
这样的话,我们就要将m_file_open_Callback中的程序做一点小小的改动。
将最后一句(imshow(imread(fpath))),更改为两句,如下:img_src=imread(fpath);imshow(img_src);不仅如此,我们的保存菜单的Callback函数,如何去获得打开菜单的Callback 函数下的img_src变量呢?这里就要将img_src来作为一个共享的数据。
许多界面编程的朋友,喜欢用global声明。
我个人不喜欢这样用,因为有更好的方法。
那就是用setappdata和getappdata两个函数。
我们可以为界面上面的任何一个具有Tag属性的空间添加应用程序数据。
当然我比较喜欢将这些共享的应用程序数据统一添加到Figure窗口上,因为这样容易记,如果一个控件一个,感觉不容易记。
你在.m文件中会发现除了各个菜单项的Callback函数以外,还有两个函数:pjimage_OpeningFcn和pjimage_OutputFcn.而pjimage_OpeningFcn就相当于界面的初始化函数,而pjimage_OutputFcn则是界面的输出函数,也就是当你不运行fig,而调用.m文件时的返回值。
所以,我们要在pjimage_OpeningFcn中添加如下的程序,来共享这个img_src 矩阵。
代码如下:setappdata(handles.figure_pjimage,’img_src’,0);然后,在m_file_open_Callback函数的最后写上如下程序:setappdata(handles.figure_pjimage,’img_src’,img_src);那么,我们在m_file_save_Callback函数中就可以像这样的来提取img_src,如下:img_src=get appdata(handles.figure_pjimage,’img_src’);那么保存的时候,自然会用到保存对话框了。
要用保存对话框,就要用到uiputfile函数了,具体的请用help uiputfile查看。
那么,保存菜单项下的程序(m_file_save_Callback),可以这样写:[filename, pathname] = uiputfile({'*.bmp','BMP files';'*.jpg;','JPG files'}, 'Pick an Image');if isequal(filename,0) || isequal(pathname,0)return;%如果点了“取消”elsefpath=fullfile(pathname, filename);%获得全路径的另一种方法endimg_src=getappdata(handles.figure_pjimage,'img_src');%取得打开图片的数据imwrite(img_src,fpath);%保存图片下面是退出菜单项的程序的。
要退出界面,只要用close函数就行了,但是通常都会有提示的。
比如你如果进行了处理图片,而又没有保存处理后的图片,那么在关闭的时候就应该给出提示,询问是否进行保存。
不过,在这里,我们先不做这个工作,等后面有需要的时候再写吧。
因此,这里的退出菜单项的程序就是一句,如下:close(handles.figure_pjimage);其实,用delete函数也是可以的,就是:delete(handles.figure_pjimage);看你的心情了。
但是运行程序的时候,你会发现,当你打开图片的时候,如果点“取消”按钮,那么在MATLAB的命令窗口会弹出错误,那是因为我们没有处理取消的情况。
下面我们来处理下这个问题,只要把m_file_open_Callback下面的程序更改为如下程序即可:[filename, pathname] = uigetfile( ...{'*.bmp;*.jpg;*.png;*.jpeg', 'Image Files (*.bmp, *.jpg, *.png, *.jpeg)'; ...'*.*', 'All Files (*.*)'}, ...'Pick an image');if isequal(filename,0) || isequal(pathname,0),return;endaxes(handles.axes_src);fpath=[pathname filename];img_src=imread(fpath);imshow(img_src);setappdata(handles.figure_pjimage,'img_src',img_src);下面我们来做一个图像二值化的一个图像处理。