Matlab交互式程序设计教程及举例

上传人:痛*** 文档编号:86522228 上传时间:2022-05-07 格式:DOC 页数:17 大小:599.50KB
收藏 版权申诉 举报 下载
Matlab交互式程序设计教程及举例_第1页
第1页 / 共17页
Matlab交互式程序设计教程及举例_第2页
第2页 / 共17页
Matlab交互式程序设计教程及举例_第3页
第3页 / 共17页
资源描述:

《Matlab交互式程序设计教程及举例》由会员分享,可在线阅读,更多相关《Matlab交互式程序设计教程及举例(17页珍藏版)》请在装配图网上搜索。

1、wordMatlab交互式程序设计教程与举例一、创建GUIGraphics User Interface新文件和编辑已经存在的GUI文件1、在matlab命令窗口中键入guide,弹出如下的对话框:这是一个双页面对话框,分别用于创建新文件和打开已存在的GUI文件,鼠标点击相应的标题即可切换。2、图中可见“创建新的GUI有四种模版选项,不管其它几个,点选第一项,按“OK按钮可打开如下列图的GUI编辑器其中左边是控件工具栏,用户可根据自己的程序将所需要的控件用鼠标拖至右侧的编辑区域进展布局。用户可将鼠标悬停在各个控件图表上查看各个对象的名称菜单栏下边是工具条,其中常用的有“保存当前GUI文件和相应

2、的m文件、“编写相应协调运行的m文件、“编辑当前控件的相应属性、“创建和修改用户自己的程序菜单、“保存当前文件并运行改程序。右下方主要区域是程序的界面布局窗口灰色网格区域是布局区域,用户可根据程序需要用鼠标拖动该区域的右下角调整该区域的大小。3、此时可以按下“图标保存该文件自然此时程序没有任何功能,只有一个主框架,弹出文件保存对话框,在文件名处输入一个文件名英文字母开头,如“my1等,扩展名自动设置为“.fig。系统除了保存当前的界面文件外,还自动生成一个与该界面一起协调运行的“文件,并在m文件编辑窗口中打开它。4、浏览一下该文件,可以看到该文件中目前自动创建了3个函数:function va

3、rargout = my1(varargin)function my1_OpeningF(hObject, eventdata, handles, varargin)function varargout = my1_OutputF(hObject, eventdata, handles)这些函数声明和参数在后续的程序设计中不要做任何修改,切记!对我们目前的应用来说第一个函数和第三个函数的程序体也不要做任何修改。根据自己的程序涉与需要只需修改第二个函数的程序体局部。具体的修改方式可以通过我的例子程序加以体会。注意第二个函数程序体的最后一条语句guidata(hObject, handles);该

4、语句在后续的程序设计中将会频繁使用,现在请先记住它。5、祝贺你!你现在已经有了一个名为“和“的可以运行的文件了!现在可以在matlab命令窗口中键入“my1运行改程序,自然,除了显示一个标题为“my1的空白窗口外,你还不能进展任何交互式控制操作自然除了关闭该窗口外,因为你还没有写任何控制程序和添加任何控件。二、增加控件与编写相应的执行程序1、现在可以编辑运行窗口的标题栏即将“my1修改为自己希望的标题,本例中我改为“参数a,b,n对r=acos(nt+b)的影响。在GUI设计窗口中点击“工具条图标,弹出如下的“属性编辑框该窗口对于后续设计中的每个控件都可以打开通过点击“工具条图标,它共有2列,

5、左列是当前对象的用户可以修改的属性名按首字母顺序排列,右列是每个属性的可以编辑的属性值,现在在左列找到“name一项,将右侧的自动生成的“my1改为“参数a,b,n对r=acos(nt+b)的影响。关闭此窗口,点击“以保存当前修改并运行程序。OK!窗口的标题栏已经变成了“参数a,b,n对r=acos(nt+b)的影响。2、现在开始程序的布局与控制设计,先从最简单的一个控制按钮开始。拖动GUI设计窗口左侧的“Push Button控件至右侧设计区域中的自己希望的位置,放开鼠标,然后可以点选并拖动该控件的右下角改变该控件的大小,如此界面中的第一个控件就绪。目前可以点击“以保存当前修改并运行程序。发

6、生了什么事情?运行窗口的响应位置处有了这个交互式控制按钮!点击这个按钮,除了按钮自动界面上有个形象的动态响应外,不会有任何响应,因为目前我们还没有编写任何控制程序。3、现在我们开始编写该控制程序。点击“工具栏图标,打开m文件编辑器,浏览相应的文件,会发现文件末尾多了一个函数头:function pushbutton1_Callback(hObject, eventdata, handles)这是系统自动生成的相应按钮控件的回调函数,系统自动将其命名为pushbutton1,其中pushbutton代表该控件的类别是“Push Button,后面的阿拉伯数字代表这是用户在界面设计中所创建的第几个

7、该控件名称用户可以进展修改,具体修改方法见下一条说明。现在用户可以在该函数头下边填写相应的自己所希望的控制程序。目前我们只希望用户点击按钮时进展一个简单的操作:完毕当前程序并关闭该窗口。这只需如下的一条语句即可:将之写在该函数头的下面close;保存修改后的m文件,回到GUI设计窗口,再次点击“运行程序,然后在运行后的窗口中点击该按钮。哈哈!如我所愿,程序安全退出了!So Easy!4、下面我们可以调整该按钮的界面显示和将自动生成的“pushbutton1名称改为自己容易记住的个性化名字。在GUI设计窗口中点击此按钮,然后点击工具条上的“工具条图标,弹出相应的“属性编辑框已调整它的名称和运行时

8、的界面属性任选。本例中我的调整如下:1找到“tag属性,将其后的“pushbutton1改为“jieshu;此时如果保存修改,然后进入相应的m文件编辑窗口,可以惊喜地看到其中的最后一个函数也进展了相应的修改:将函数头中的“pushbutton1变成了“jieshufunction jieshu_Callback(hObject, eventdata, handles)% hObject handle to jieshu (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles st

9、ructure with handles and user data (see GUIDATA)close;(2)在属性编辑框中找到“String一栏,将后面的内容改为“结 束;找到“FontSize,将后面的内容改为“20;找到“ForegroundColor,点击左右两栏间的图标,弹出颜色选择窗口,点选自己喜欢的颜色;找到“FontName,将后续的内容改为“楷体_GB2312,找到“FontWeight,点击后面的图标,在下拉菜单中选择“Bold一项。现在再运行程序,观察运行界面的变化,体会各个属性值和属性名的调整对按钮外观的影响。5、现在在GUI设计窗口中再建立一个按钮,界面的详细设计

10、略,本例中我讲显示字符改为了“文 档,它的“Tag改为了“help.进入m文件编辑器,发现最后又增加了一个函数:function help_Callback(hObject, eventdata, handles)在该函数头下编写如下一条程序:winopen(code.pdf);其功能是将程序控制权交给windows,由windows打开引号内所指定的一个当前路径下的文件,本例中我随便选了一个PDF文档,在程序执行时点击该按钮即可打开该文档。大家最后上交的综合作业中的文档与使用说明帮助文件我希望大家以这样连接的方式可以让我顺利简单地打开。6、继续界面的设计工作。为了在程序的运行界面中显示图形,

11、需要建立图形窗口,建立的过程很简单,同样是拖动GUI设计见面中左侧的“Axis控件至右侧的界面布局窗口的自己希望的位置,然后用鼠标拖动方式调整其大小即可。本例中我建立了两个图形窗口,其“Tag名系统自动生成为“Axes1和“Axes2用户也可同样通过属性编辑窗口修改为自己个性化的名称,本例中我没有做相应的修改。此外,我又建立了第三个控制按钮,其“Tag属性改为了“jump,“String属性改为了“跳起来,并进展了如下的布局。可以在m文件中看到此时又多了一个新的函数文件头function jump_Callback(hObject, eventdata, handles)该按钮的控制函数较为复

12、杂,后续中我再详细说明,现在先不写任何程序。7、在布局界面上再增加两个“slider控件滚动条,系统自动将其“Tag命名为“slider1和“slider2,我在本例中依次用它们在程序运行时控制显示图像的函数中的“a、“b两个参数的调整,此时浏览一下m文件,可以看到自动为每个“Slider增加了两个函数,分别如下:function slider1_Callback(hObject, eventdata, handles)% hObject handle to slider1 (see GCBO)% eventdata reserved - to be defined in a future v

13、ersion of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,Value) returns position of slider% get(hObject,Min) and get(hObject,Max) to determine range of slider% - Executes during object creation, after setting all properties.function slider1_CreateF(hObject, ev

14、entdata, handles)% hObject handle to slider1 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFs called% Hint: slider controls usually have a light gray background, change% usewhitebg to 0 to use default. See ISPC

15、 and PUTER.usewhitebg = 1;if usewhitebg set(hObject,BackgroundColor,.9 .9 .9);else set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);end% - Executes on slider movement.function slider2_Callback(hObject, eventdata, handles)% hObject handle to slider2 (see GCBO)% eventdata reserved -

16、to be defined in a future version of MATLAB% handles structure with handles and user data (see GUIDATA)% Hints: get(hObject,Value) returns position of slider% get(hObject,Min) and get(hObject,Max) to determine range of slider% - Executes during object creation, after setting all properties.function

17、slider2_CreateF(hObject, eventdata, handles)% hObject handle to slider2 (see GCBO)% eventdata reserved - to be defined in a future version of MATLAB% handles empty - handles not created until after all CreateFs called% Hint: slider controls usually have a light gray background, change% usewhitebg to

18、 0 to use default. See ISPC and PUTER.usewhitebg = 1;if usewhitebg set(hObject,BackgroundColor,.9 .9 .9);else set(hObject,BackgroundColor,get(0,defaultUicontrolBackgroundColor);end其中的两个_CreateF我们后续不需任何操作,所以也不需要任何修改,现在先记住我们需要对于两个_Callback函数进展程序的填写操作,以响应当程序执行时当用户拖动滚动条时应该引起何种响应,具体的响应程序也在后续填写,现在先在GUI界面中

19、修改其属性值。选中“Slider1,打开相应的属性编辑器,找到其中的“Max一栏,将后面的内容改为“8本例我的“a值最大值为8,找到其中的“Min一栏,将后面的内容改为“1本例我的“a值最小值为1,找到“Value一栏,点击后面的图标,在弹出的对话框中将“改为“5,以指定在程序进展运行时将该滚动条的值设置为5。此时可以运行程序,观察第一个滚动条中的滑块位置应该在中间偏右的位置,这说明上述设定已经成功。“Slider2我在这里先不做调整,系统自动默认最小值为0,最大值为1,当前值为0,逻辑上本例的“b值应该在0与2之间,作为示例,我在后续的程序书写中将获得的该滚动条上的当前值乘以2来进展相应的调

20、整。作为示例,我对于本程序中参数n用一个“Edit Text进展程序运行中的输入控制,所以在界面上再产生一个“Edit Text,系统自动将其“Tag设置为“edit1,我对此不作修改,只是将其“FontSize属性调整为“16,将String属性改为“1。此时检查m文件,可以观察到系统又自动创建了2个函数:function edit1_Callback(hObject, eventdata, handles)function edit1_CreateF(hObject, eventdata, handles)同样其中的edit1_CreateF我们也不要进展任何改动,目前先记住日后在edit

21、1_Callback中编写程序以响应用户在程序运行时响应的输入即可。到此,本示例程序的控制对象和2个绘图区域已经完全建立完毕,目前我安排的界面如下列图。8、下面再进展一些程序界面的辅助工作,用“Static Text控件对界面增加一些说明,以增加界面的友好性。在第一个图形窗口上方的空隙中放置一个“Static Text,将“String改为“参数a,b,n对r=acos(nt+b)的影响,按自己的意愿设置好位置,颜色,字体大小,字体名称等属性值,具体设置详细大家可以通过属性编辑器窗口查看。在两个滚动条和编辑框的左侧依次放置3个“Static Text,分别用于说明后续的3个控件分别用于控制哪个

22、参数,为此,将它们的“String属性分别设置为“a、“b、“n,大小和颜色等外观形象进展适当的调整。在第一个滚动条下的左右两端各放置一个“Static Text,分别用于说明该滚动条的最大值和最小值,为此将它们的“String属性分别设置为“1、“8;在第二个滚动条下的左右两端各放置一个“Static Text,分别用于说明该滚动条的最大值和最小值,为此将它们的“String属性分别设置为“0、“2。最后,在两个滚动条下方中局部别放置一个“Static Text对象,分别用于实时显示对应的滚动条在程序运行时被用户拉动时当前的具体数值,所以其“String属性值将来在程序中即时获取,因此在目前

23、设计阶段不进展调整,但为了防止混淆,将二者的“Tag属性分别修改为“texta和“textb以便于进展程序控制,具体实现方式参见后续程序的编写。这样设计完成时得到的界面如如下图。三、完整程序的编写。目前本例所希望的界面布局已经全部完成除菜单外,此功能后续介绍,现在开始程序的编写工作,写具体的程序前,必须来了解matlab的各function函数间的数据传输机制。我们先来考察一下已经完成的m文件,在目前系统自动生成的所有function中,除第一个相当于C语言中的main函数外,其它的所有函数的输入参数中都有一个名为handles的变量,这是matlab为GUI程序开发者提供的一个数据结构,用于

24、各个函数之间的数据传输,handles是结构名,程序中的每个各function间的数据都必须以handles.*的形式存在,才能实现各协调工作的各函数之间的数据传输,目前当我们完成设计后,我们已经有了一批形如handles.*的变量,如在添加了第一个显示为“结 束的按钮并将其“Tag属性值设置为“jieshu后系统已经自动地为程序开发者创建了名为handles.jieshu的变量,如果我们在程序中希望访问这个按钮对象,我们就可通过这个handles.jieshu变量找到它,具体的访问程序编写后续写程序时不难学会。接着我们创建“Tag属性分别为“help和“jump第二个、第三个按钮时,系统马上

25、为我们也创建了相应的两个变量handles.help和handles.jump。接着我们建立两个图形窗口时,系统也依次建立了handles.axe1和handles.axes2两个变量用于程序中访问这两个图形窗口,在设置好两个滚动条后,系统也立即建立了handles.slider1和handles.slider2两个变量,然后再建立滚动条下面的编辑框时也建立了handles.edit1变量。现在相信你明白“Tag属性值的作用了吧?该属性值是什么,系统就在其前加上handles.而产生可以访问该控件的一个变量,所以界面设计阶段如果自己想修改“Tag属性值,必须保证和其它的不能一样,且符合matl

26、ab变量的命名规如此必须英文字母开头,由字母数字和下划线组成。接着我们在界面上布置的每个“Static Text“Tag属性一样的变量,本例程序中我们所设置的那些静态文本变量除最后2个外即分别位于两个滚动条下方中间的文本框都不需要进展控制,所以不用理睬它们,只需记住最后两个变量名分别是handles.texta和handles.textb,它们的“Tag属性在设计阶段我们分别已经改为了texta 和textb。除了上述的在界面设计阶段所自动建立的前缀为handles.的变量外,如果在每个函数中还需要创建新的变量,并希望这些变量值能为其它function共享,那么在定义新变量时一定也要建立形如h

27、andles.*的变量,如本例程序中我们要用到的handles.a,handles.b, handles.hh,handles.linewidth等。明白了数据变量命名机制后,我们现在开始完善我们本例的程序编写。1、填写系统已经生成的my1_OpeningF函数在m文件中找到函数:function my1_OpeningF(hObject, eventdata, handles, varargin)该函数名称“_前的名字与创建GUI时保存的文件名一样,“_后的“OpeningF由系统自动生成,是固定不变的,开发者也不可进展修改,该函数用于执行用户所希望的程序运行时的matlab语句。本例中我希

28、望获取在设计阶段中两个滚动条中设置好的当前值作为函数r=acos(nt+b)中的a,b,n的值在左边大图像窗口中绘制该函数的图像,并作为花絮在第二个图像窗口中显示名为“的图像文件该文件存放在当前目录下。目前的该函数文件系统已经自动生成了两条语句% Choose default mand line output for my1handles.output = hObject;% Update handles structureguidata(hObject, handles);不要修改它们,在两行语句之间插入自己的语句。本例中我所键入的语句和简单功能说明如下:handles.linewidth=

29、2; %定义画图的线宽handles.color=b; %定义画图的颜色handles.a=get(handles.slider1,value);%获取第一个滚动条当前值,并将其赋给变量%注意此句的语法,get(界面中的控件名称,所希望获取的属性名%还记得吗?我们在设计阶段该控件的value已经设置为5%所以此句执行后=5handles.b=2*pi*get(handles.slider2,value);%原理与语法上句一样,稍有差异的是我们在设计阶段此控件的最小值和最大值%分别设置为0和1,即用户在拉动滚动条时此值介于0和1之间%而我们希望该函数中b值的变化在0和2*pi之间,所以对获得的滚

30、动条的值%乘以2*pi以达到我们的要求,不过在设计阶段该值为0,所以此句执行后% handles.b=0handles.n=str2double(get(handles.edit1,string);%原理和前句一样,获取handles.edit1的字符串内容,设计阶段设置为5%但其数据类型为字符串,所以用str2double函数转化为浮点数赋值给handles.nhandles.t=linspace(0,2*pi,1000);%对极坐标函数r=acos(nt+b)中的自变量t进展采点,0和2*pi之间等间距采%1000个点呵呵,数目显得比拟多,辛苦计算机了r=handles.a*cos(han

31、dles.b+handles.n*handles.t);% 对函数r=acos(nt+b)由获取的常数a,b,n计算对应t的1000个点处的函数值%注意此时的变量r我没有加前缀handles.,因为此变量仅仅在该函数内部使用%不需要其它函数共享,所以我们可以不把它放在handles结构中x,y=pol2cart(handles.t,r);%本来可以直接用polar函数画该函数的图像,但实验一中的实验大家也看到了会%出现极坐标网格线,我希望不要它们,所以用pol2cart将这组极坐标数据转化为直角%坐标,后面用plot函数在直角坐标系下画出等效的图像%同样变量x,y仅仅用于本函数,所以也不需要加

32、上handles.前缀axes(handles.axes1);%用axes函数通知系统执行后续画图操作在名为handles.axes1的图形窗口内%即在设计时建立的左边较大的图形窗口内画图handles.hh=plot(x,y,linewidth,handles.linewidth,color,handles.color);%用plot函数画由变量指定线宽的图像,目前其值为2%注意该操作返回一个图像指针值,将其值赋给变量,用于其它函数操作axis(-8.1 8.1 -8.1 8.1); %调整显示窗口坐标X围axes(handles.axes2);%用axes函数通知系统执行后续画图操作在名为

33、handles.axes2的图形窗口内%即在设计时建立的右边较大的图形窗口内画图handles.m1,handles.map1=imread(dance_29.gif,1:10);%用imread函数读取图像文件中的数据放入4维矩阵%彩色图像的颜色索引表放入变量中%相应的语法和逻辑较为复杂,如果大家有兴趣,可查阅matlab帮助系统中的%image processing toolbox(图像处理工具箱)中的内容%为与后面的语句相结合,大家形式上这样理解:图像文件作为一个%动态图像文件,里面包含了10X静态文件当连续播放时可产生动画效果%现在数据经上条语句放在了4维矩阵试着想象一下该矩阵的组成中

34、%其中三维子阵handles.m1(:,:,:,1)放置第一X图片信息,三维子阵%handles.m1(:,:,:,10)中依次防止了10幅其中的静态图片文件imshow(handles.m1(:,:,:,1),handles.map1);%用imshow函数将上述的第一幅图像显示在当前的图形窗口内axes(handles.axes1);%由于本程序运行的后续大局部操作都在第一个图形窗口内,所以执行该语句通知系统%此后再出现的绘图命令都放在第一个图形窗口内,即中。保存文件,此时运行程序,结果如如下图所示。左边图形窗口中显示的是a=5,b=0,n=1时极坐标函数r=acos(nt+b)的图像,右

35、边图形窗口中是脑白金老太婆跳舞时的一个瞬间定格画面。现在不难注意程序运行窗口中的一点令人不舒服的地方:两个滚动条下方的中央位置处还没有满足我们的要求显示当前滚动条所处位置之值。那么我们继续回到m文件的这个函数中,在刚刚完成的语句后继续实现该功能:a,string,num2str(handles.a);%逻辑上该函数(set)的功能与前述GUI设计中对每个对象填写属性值的功能一样%唯一的差异是在程序进展中用语句实现,其语法为:%set(所要设置的对象变量名,属性名,属性值)string%细节方面需注意handles.a是数值类型,需要用num2str转化为字符串b,string,num2str(

36、handles.b);%与前一条语句功能一样,只是所修改的对象和属性值满足我们的要求。此时再次运行程序,界面如下,实现了我们的显示目地下面介绍一下该函数内系统自动生成的语句guidata(hObject, handles);的语法功能。为了让程序内的各函数共享handles数据结构中的每个变量的最新数据,在每个函数中,如果用户修改或新定义了至少一个handles.*变量,那么切记在该函数的最后一条语句中一定要写上该语句,以通知其它所有函数:各位函数筒子们,我在工作中修改了共享数据,日后工作中请访问新的数据,以免数据使用旧数据而发生错误!所以在日后其它函数中别忘了加上该语句。现在我们拖拉运行程序

37、的滚动条或点击“跳起来按钮,我们会发现没有所希望的响应,这是正常的,因为我们还没有编写相应的程序语句,下面我们开始逐个编写各个对象发生交互性操作时所希望的程序相应。2、填写function slider1_Callback(hObject, eventdata, handles)函数体找到m文件中的function slider1_Callback(hObject, eventdata, handles)书写如下语句:handles.a=get(handles.slider1,value);%获取新的滚动条位置值,赋给a,string,num2str(handles.a)%在滚动条下方显示新的

38、相应数值r=handles.a*cos(handles.b+handles.n*handles.t);%用新的a,和的b,n和向量t计算新的rx,y=pol2cart(handles.t,r); %转换为直角坐标handles.hh=plot(x,y,linewidth,handles.linewidth,color,handles.color);axis(-8.1 8.1 -8.1 8.1);%调整显示X围guidata(hObject, handles);%通知其它函数handles结构发生了变化如何?这些语句都不陌生吧?所以进展相应的调整时只需要简单的复制粘贴操作。现在重新运行程序,拖动

39、第一个滚动条,发生了什么变化?很兴奋吧?3、填写function slider2_Callback(hObject, eventdata, handles)函数体找到m文件中的function slider2_Callback(hObject, eventdata, handles)书写如下语句:handles.b=2*pi*get(handles.slider2,value);%获取新的滚动条位置值,赋给handles.b,注意要乘以2*pi的b,string,num2str(handles.b)%在滚动条下方显示新的相应数值r=handles.a*cos(handles.b+handles

40、.n*handles.t);%用新的b,和的a,n和向量t计算新的rx,y=pol2cart(handles.t,r); %转换为直角坐标handles.hh=plot(x,y,linewidth,handles.linewidth,color,handles.color);axis(-8.1 8.1 -8.1 8.1);%调整显示X围guidata(hObject, handles);%通知其它函数handles结构发生了变化4、完成function edit1_Callback(hObject, eventdata, handles)函数体找到m文件中的function edit1_Cal

41、lback(hObject, eventdata, handles)书写如下语句:handles.n=str2double(get(handles.edit1,string);r=handles.a*cos(handles.b+handles.n*handles.t);x,y=pol2cart(handles.t,r);handles.hh=plot(x,y,linewidth,handles.linewidth,color,handles.color);axis(-8.1 8.1 -8.1 8.1);guidata(hObject, handles);这些语句的语法和逻辑功能我们都熟悉了,就

42、不添加注释了。保存程序,再次运行程序,特别是修改数据编辑窗口中的n值,观察运行结果。下面我们完成小花絮在右侧的图像窗口中让老太婆跳舞。5、完成function jump_Callback(hObject, eventdata, handles)程序体找到函数function jump_Callback(hObject, eventdata, handles)书写如下语句axes(handles.axes2); %下面的绘图操作在第二个图形窗口中进展for nn=0:49 n=rem(nn,10)+1; %找到循环变量被10除后的余数,将余数加1,赋给n imshow(handles.m1(:,

43、:,:,n),handles.map1); %在图形窗口内显示程序运行时四围图片矩阵的第n个三维矩阵数据 pause(.05);endaxes(handles.axes1);%循环完毕后通知系统日后绘图操作在第一个图形窗口内注意到此函数中我们没有修改handles数据结构之值,所以不需要用guidata(hObject, handles);通知其它函数。介绍一个编程实用小技巧,随着GUI界面中控件的增加,m文件的function个数也越来越多,为了快速找到自己希望的函数,技巧如下:在m文件编辑器菜单栏“中的图标“,点击它,会出现一个下拉菜单,里面列出了本m文件中所有的函数,点击自己希望的函数名

44、,如此编辑窗口中光标会自动跳转到此函数头局部。如何?很人性化吧?三、为系统控制添加菜单控制除了用我们已经看到的“按钮等控件增加程序的交互性手段外,也可以象我们常见的很多程序一样,通过窗口顶部区域的菜单进展程序的交互式控制。本例中我们建立两个简单的菜单,其功能是第一个用于当前图像的颜色和图形线宽的控制,第二个用于打开此文档。1、建立两个主菜单回到GUI界面设计环境,在工具条上点击“创建和修改用户自己的程序菜单图标,打开如如下图所示的菜单编辑器。我们可以用它们编辑两类菜单:“Menu Bar和“Context Menu(上下文菜单),本文档只介绍前者,大家如果有性趣第二类菜单,可以查阅matlab

45、的帮助系统。连续点击两次上方的工具条中的第一个图标,下面的窗口中增加了两项,如下列图。系统自动将其显示内容和变量名“Tag(这个不陌生吧?)分别命名为“Untitiled 1和“Untitiled 2,现在点选其中的一个,如“Untitiled 1,编辑器右边会出现该菜单的显示和控制属性编辑器如左图,编辑其属性如右图点选第二个菜单项“Untitled 2,分别设置两个属性如如下图。点击“OK按钮。现在保存并运行程序,可以看到运行窗口上方出现了两个菜单条,这时再查阅一下m文件,我们会发现系统又自动生成了两个函数头function m1_Callback(hObject, eventdata, h

46、andles)function m2_Callback(hObject, eventdata, handles)其命名逻辑是我们刚刚在设计时将两个菜单对象的的“Tag属性分别修改为了m1和m2。现在在function m2_Callback(hObject, eventdata, handles)下书写如下语句Winopen(Matlab交互式程序设计教程与举例.doc);保存文件,再次运行,如果当前目录下有该文件,如此windows系统承受指令,打开该文件。2、建立第一个主菜单下分别用于控制颜色和线宽的两个子菜单 回到GUI编辑环境,点击“图标,再次打开菜单编辑器,选择第一个菜单项。然后连续

47、点击左上方的第二个图标,建立该菜单的两个子菜单项。分别重复1中的操作,在右方编辑窗修改它们的“Label和“Tag两个属性如如下图所示。对第一个子菜单项同样分别建立三个子菜单项,“Label属性依次改为“1、“2、“3,“Tag属性依次改为“m111、“m112、“m113(大家自己可以任意取个性化的名字,我命名的原如此是m代表“菜单,“m113是第1个主菜单下的第1个子菜单下的第3个菜单项,这样日后在m文件下写程序时不至于混乱);对第二个子菜单项同样分别建立三个子菜单项,“Label属性依次改为“红色、“绿色、“蓝色,“Tag属性依次改为“m121、“m122、“m123。注意用鼠标点击其中

48、的名为“2和“蓝色的两个菜单项的第5个属性前的框,出现“,用于在程序运行时给用户指示当前的画图操作是用线宽为“2的“蓝色绘制曲线,选择后如图。修改完后菜单编辑器显示如如下图。点击“OK按钮,完毕菜单编辑。保存程序并运行之,在程序运行窗口中浏览观察菜单和子菜单的变化。查看m文件,发现系统又自动生成了8个函数头,后续我们编程控制需要的几个函数分别是:function m111_Callback(hObject, eventdata, handles)function m112_Callback(hObject, eventdata, handles)function m113_Callback(h

49、Object, eventdata, handles)function m121_Callback(hObject, eventdata, handles)function m122_Callback(hObject, eventdata, handles)function m123_Callback(hObject, eventdata, handles)其中前3个是用户选择“线宽的3个菜单项的响应函数,后3个是用户选择“颜色的3个菜单项的响应函数。3、控制“线宽的函数编辑在m文件中找到函数function m111_Callback(hObject, eventdata, handles)

50、在其后书写如下语句handles.linewidth=1;set(handles.hh,linewidth,handles.linewidth);%改变名为的图形的线宽为1set(,checked,on);%将该菜单项点选上“以指示当前画图线宽为1set(handles.m112,checked,off);set(handles.m113,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hObject, handles);%通知系统其它函数handles数据结构发生了变化在m文件中找到函数function m112_Callback(hObject, eventd

51、ata, handles)在其后书写如下语句handles.linewidth=2;set(handles.hh,linewidth,handles.linewidth);%改变名为的图形的线宽为2set(,checked,on);%将该菜单项点选上“以指示当前画图线宽为2set(handles.m111,checked,off);set(handles.m113,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hObject, handles);%通知系统其它函数handles数据结构发生了变化在m文件中找到函数function m113_Callback(hO

52、bject, eventdata, handles)在其后书写如下语句handles.linewidth=3;set(handles.hh,linewidth,handles.linewidth);%改变名为的图形的线宽为3set(,checked,on);%将该菜单项点选上“以指示当前画图线宽为3set(handles.m111,checked,off);set(handles.m112,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hObject, handles);%通知系统其它函数handles数据结构发生了变化保存程序,运行它们,随意点选“线宽的3个子

53、菜单项,观察菜单和图形的变化,体会相应的程序控制逻辑。4、控制“颜色的函数编辑在m文件中找到函数function m121_Callback(hObject, eventdata, handles)在其后书写如下语句handles.color=r;set(handles.hh,color,handles.color);set(handles.m121,checked,on);%将该菜单项点选上“以指示当前画图颜色为红色set(handles.m122,checked,off);set(handles.m123,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hOb

54、ject, handles);%通知系统其它函数handles数据结构发生了变化在m文件中找到函数function m122_Callback(hObject, eventdata, handles)在其后书写如下语句handles.color=g;set(handles.hh,color,handles.color);2,checked,on);%将该菜单项点选上“以指示当前画图颜色为绿色1,checked,off);set(handles.m123,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hObject, handles);%通知系统其它函数handl

55、es数据结构发生了变化在m文件中找到函数function m123_Callback(hObject, eventdata, handles)在其后书写如下语句handles.color=b;set(handles.hh,color,handles.color);3,checked,on);%将该菜单项点选上“以指示当前画图颜色为蓝色1,checked,off);2,checked,off);%另两项菜单项如果之前有“,将其去掉guidata(hObject, handles);%通知系统其它函数handles数据结构发生了变化 保存程序,运行它们,随意点选“颜色的3个子菜单项,观察菜单和图形的变化,体会相应的程序控制逻辑。

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!