《Matlab GUI 基础编程.pdf》由会员分享,可在线阅读,更多相关《Matlab GUI 基础编程.pdf(217页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 1 MATLAB 中文论坛相关帖子整理中文论坛相关帖子整理()说明:说明:本 资 料 所 有 问 题 及 代 码 均 摘 选 自matlab中 文 论 坛(),主要供自己学习使用。非常感谢论坛的所有提出以及解答问题的会员。2 目目 录录 1、GUI 新手之教你读懂 GUI 的 M 文件.6 2、GUI 程序中改变 current directory 引起的问题.11 3、GUI 中 h0bject 和 handles 的区别.12 4、handles 结构中句柄和对象的关联问题.13 5、Matlab 利用定时器连续显示图片的问题.15 5-1、GUI 中实现在图片任意位置上标注 text.
2、18 5-2、使用 edit 的另外一种 callback.18 6、MATLAB 如何实现图像的任意裁减?.18 7、坐标轴标注刻度、网格、文字方向.19 8、Matlab 中对 uitable 的操作:调节各列宽度,设定某列是可编辑的.20 9、将在 Matlab 下编写的 GUI 转成独立于 Matlab 平台的应用程序.21 10、要将用 Matlab 语言编写的函数文件编译成可独立执行的*.exe 文件.24 11、matlab GUI 程序转换成 exe 可执行文件.27 12、gui 生成独立的应用程序的发布问题.29 13、GUI 控制 simulink 模块及参数的综合实例!
3、.30 13-1、在 axes 显示图像后,在图像上单击鼠标时,回调函数的定义规则和使用方法.31 14、如何在循环中加入 waitbar,并在 waitbar 上添加取消按钮.32 15、在 matlab 中对信号进行 FFT 变换.34 16、动态显示 figure 中曲线的 x-y 坐标值的一个函数.35 17、在 GUI 界面的打开按钮中,如何对文件进行操作.38 18、Matlab 不同控件之间的数据传递问题.40 19、在 edit box 里输入相关数据后,直接按回车键,不用鼠标点击 pushbutton 就可以直接执行.42 19-1 GUI 使用 editbox 输入数据后如
4、何自动清除数据.42 20、在 GUI 中,计算结果怎么用 excel 来保存到指定的文件夹中.43 21、如何得到 popupmenu 选项中最后一个字符串的 VALUE 值.44 22、回调函数互相调用的问题.45 22-2string 和 number 相互转换的问题.46 23、这样的功能的 pushbutton 的 callback 怎么写呀,谢谢了.46 24、GUI 中 axes 使用 subplot 时的清空及 axes 大小的固定的解决方法.47 25、退出 GUI 时如何把全局变量中的值清空?.49 26、从串口接受数据时,如何把波形绘制到指定的坐标轴上?.49 27、两个
5、 GUI 之间如何传递数据.51 28-1 几个有用的帖子.53 28-2、GUI 之间互相调用和关闭问题.55 29、GUI timer 定时器.56 30、如何在循环中加入 waitbar.57 31、如何连续读入图片!.58 32、如何把此次输入的值保存为下一次初始化的值.59 33、Matlab 关于解决自动保存 gcf 的问题.59 34-1、在 matlab 里面如何读取 excel 里面的数据或者写入数据.61 34-2、在 excel 中连续输入数据。.62 3 35、Matlab GUI 不同控件之间的数据传递问题.64 36、怎么统计一个十进制数中0的个数?求助!.65 3
6、7、Matlab 对 listbox 里的条目能否一条条单独设置回调函数?.66 38、键盘操作:matlab GUI 中如何取得从键盘输入的按键的键值.68 39、GUI 如何响应鼠标事件.69 40、matlab 截图、图像处理.72 41、MATLAB GUI 中利用定时器制作动画-MATLAB.80 42、MATLAB 如何从 GUI 中返回参数-MATLAB.82 43、MATLAB 中 GUI 子程序的参数传递-MATLAB.83 44、Matlab 保存 axes 上的图的问题(包括坐标轴).84 45、Matlab 鼠标控制的两个 GUI 例子(附代码).87 46、分享初学的
7、一个 GUI 例子新手好好看看(图).93 47、axes 清除畫面.109 48、GUI 中调用自己制作的帮助文件.110 49、关于从 gui 调用 simulink.110 50、如何将菜单中退出项和窗口关闭的回调函数合并?.113 51、matlab 日历程序.115 52、如何在 GUI 里得一个 axes 实现双 Y 坐标轴.117 53、如何实现动态的 GUI 界面.117 54、关于 GUI 和 simulink 参数传递和执行.118 55、代码运行时间的计时方法.130 56、如何在 GUI 指定的 axes 中再画一个 axes.131 57、按下鼠标左键并拖动鼠标时的作
8、图方法.132 58、图像处理相关资料.133 59、保存 axes 坐标轴上画的曲线或图形.136 60、在 GUI 中如何打开 IE.137 61、gui 输入数据,通过 rs232 传给芯片.137 62、Matlab 关于 gui 和 excel 的问题.138 63、matlab 如何显示数学公式.141 64、修改 matlab 自带的 tabdlg 的字体和颜色.144 65、求助 Matlab 的 RGB 彩色图合成.144 66、如何删除已绘制的曲线?.145 67、总结一下,MATLAB 中随机矩阵获得.146 68、【原创】GUI 设计中背景音乐的定制与关闭.149 69
9、、Matlab 如何改变 GRID 网格线的颜色?.152 71、把 plot 图上的某些曲线排除在 lengend 之外,即不用 legend 标注出来.153 72、如何连续对矩阵追加数值.154 73、两个等直径圆管的交线.156 74、Matlab 的 csvread 读取数据的问题.157 75、在对数坐标系插值的问题.158 76、实现在原有图像上的部分图像变为白色.158 78、如何实现双击 listbox 中的条目才表示选中.159 79、如何删除矩阵中的 NaN.160 80、用平行截面法讨论由曲面 z=x2-y2 构成的马鞍面形状。.160 4 81、如何利用 ode45
10、解方程.161 82、Matlab 图片如何批处理?pic 变量逐一读取文件夹所有图片名.161 83、方程为:exp(-x)=cos(x),用迭代法求出最小的正根,当相对误差(hObject,eventdata)fenbianlv1(pushbutton2_Callback,hObject,eventdata,guidata(hObject)?Error while evaluating uicontrol Callback 应该是某个地方设置的问题。pushbutton 里面的函数体好像没问题。就算在第二个函数体里面只编写一个很简单的赋值语句也会出现同样的错误,调试发现点击第二个 push
11、button 时根本没有进入到这个函数体内。好像是点击了一个pushbutton 后再点击第二个 pushbutton 它就找不到这第二个 pushbutton的 callback 函数了。但如果两个 pushbutton 都编写简单的赋值语句发现没有错误,说明第一个 pushbutton 的 callback 函数体代码对第二个 12 pushbutton 的 callback 调用产生了影响,但是是什么地方影响了一直发现不了。解决办法:解决办法:是在 pushbutton1 和 pushbutton2 的回调函数里用 cd(dataRoute)把matlab 的 current direc
12、tory 的路径给改了,数据读取完成后,没有恢复到原先的路径,导致程序出错。读取数据前先保存原先的路径:oldpath=cd;数据读完后再恢复原先的路径:cd(oldpath);修改后的程序见实例程序:fenbianlv1.3、GUI 中中 h0bject 和和 handles 的区别的区别 刚学 GUI,举个例子,就是 Pop_up Menus 吧,他的回调函数是这样的:function=pushbutton1_Callback(hObject,eventdata,handles)然后我想问的是:Val=get(h0bject,Value)和Val=get(handles.pushbutto
13、n1,Value);这两个的值是一样的吗,如果是一样的,那 h0bject 和 handles 在使用时有什么区别?答:答:在 MATLAB GUI 中,数据分两种:GUI data 和 application data。两种数据的存取机制是相同的,但是 GUI data 使用起来比较方便。每一个每一个 GUI 图形界面都维持一个和自己的界图形界面都维持一个和自己的界面的图形(面的图形(figure)相)相联系的一个联系的一个 handles 数据结构,这个数据结构中容纳图形界面内所有控件(按数据结构,这个数据结构中容纳图形界面内所有控件(按钮、列表框、编辑框等)的句柄,相当于一个大的钮、列表
14、框、编辑框等)的句柄,相当于一个大的“容器容器”,里面存放了,里面存放了 figure内所有控件的句柄。内所有控件的句柄。同时,handles 结构也可以被 figure 内所有控件的回调函 13 数访问,因为回调函数的输入参数中都有 handles 结构。此外,在控件的回调函数内可以把数据存储到 handles 结构中。handles 结构数据的取得和存储是通过 guidata 函数来实现的。例如:在编辑框 edi 的回调函数内想获得 t 编辑框的句柄,hObject 可以,也可以用 handles.edit,这两个值是一样的,没有区别,只不过获得控件句柄的方式不同而已:hObject 是调
15、用回调函数时直接传过来的,handles.edit 是从 handles 结构中取得的。但是,在控件的 CreateFcn 函数中如果想访问控件,必须用 hObject,而不能用 handles.edit,因为这时控件还没被创建,其句柄还没有加入到 handles 结构中。各控件的回调函数中,hObject 的值是不一样的,分别代表调用回调函数的控件的句柄,而 handles 结构却是一样的。这种机制便于 figure 内的不同控件的回调函数内传递数据。4、handles 结构中句柄和对象的关联问题结构中句柄和对象的关联问题 1、问题、问题 1:handles.axes1=axes(tag,t
16、ag1);delete(handles.axes1);handles handles=axes1:0.027 figure 中的坐标轴已经被删除了,14 但是为什么 handles.axes 还存在?还有运行下面出错:get(handles.axes,tag)?Reference to non-existent field axes.问题症结:问题症结:delete(handles.axes1)是删除了和 handles.axes1 句柄相关联的对象,但是 handles 结构没有清空,其中仍然有 axes1 句柄的数值。只是这个句柄已经失效了,因为没有对象和它关联了。所以,你再用 get 或
17、 set 想获得或设置对象的属性时就会出错。另,设定的是 handles.axes1,不是 handles.axes,所以提示在 handles结构中不存在 axes 这个句柄,而不是无效的句柄(invalid handle object)。get(handles.axes,tag)?Reference to non-existent field axes.2、问题、问题 2:matlab help 的一个例子:%Create figure to use as GUI in your main function or a subfunction figure_handle=figure();%
18、create structure of handles myhandles=guihandles(figure_handle);%Add some additional data as a new field called numberOfErrors myhandles.numberOfErrors=0;%Save the structure guidata(figure_handle,myhandles)不是很明白 guidata 的用法,figure_handle 和 myhandles 之间是什么关系?是如何进行保存的。15 答:答:这就是 GUI 里面的句柄和包含句柄的结构之间的区别
19、。figure_handle 是和所创建的 figure 相关联的句柄,通过语句 myhandles=guihandles(figure_handle);所获得的是和 figure_handle 句柄相关联的一个结构,此结构包含了该figure 内所有控件的句柄,比如:菜单、工具条等等控件的句柄,其中也包含 figure_handle 这个句柄。myhandles 结构可以 储存与 GUI 有关的一切数据。guidata(figure_handle,myhandles)是保存与 figure 的句柄figure_handle 相关联的 myhandles 结构。5、Matlab 利用定时器连续
20、显示图片的问题利用定时器连续显示图片的问题 利用定时器连续显示图片,里面用的是 image 函数,但 image 函数显示图片大小会失真。于是改用 imshow 函数,能解决大小失真的问题。但每次点击播放,都会弹出可恶的窗口。调试发现,发现每次调用 imshow 时都弹出来。搞不清问题出在哪里。以下是图像播放的代码:function picture_play(hobj,event,handles)global filename1;global pathname1;global number_of_file1;global index1;global A;index1=index1+1;if i
21、ndex1=number_of_file1+1 index1=1;16 end A=imread(pathname1,filename1index1);cla;imshow(A,parent,handles.axes4);strFileName=fullfile(pathname1,filename1index1);set(handles.filename_edit,string,strFileName);解决办法:解决办法:经过调试,追踪 imshow 函数的内部,终于找出了问题:打开 figure 的属性编辑器,可见 fugure 的HandleVisibily属性值默认为callback
22、,把它改为on;同时确保NextPlot的属性值为add,问题解决。另,新建的 figure 对象的 HandleVisibily属性,默认值都为 callback。帮助文件说,这是 matlab 采取的一种保护措施,HandleVisibily属性值默认为callback,figure 的句柄只对其所包含控件的回调函数来说是可见的。这也可能是 imshow 和 image 函数在处理这一问题上的不同吧。注意:类似的问题以前在论坛中也有会员提出过:注意:类似的问题以前在论坛中也有会员提出过:如何把波形绘制到指定的坐标轴上?发表于如何把波形绘制到指定的坐标轴上?发表于 2007-11-21 11
23、:27 AM 17 在 GUI 做了一个有三个坐标轴的界面,用于显示从串口接收到的数据。串口设置如下:g=serial(COM1);g.InputBufferSize=4096;g.OutputBufferSize=4000;g.BaudRate=9600;g.BytesAvailableFcnMode=byte;%中断触发事件为bytes-available Event?g.BytesAvailableFcnCount=45;%接收缓冲区每收到 45 个字节时,触发回调函数 g.BytesAvailableFcn=instrcallback;%得到回调函数句柄 回调函数 instrcallb
24、ack 的绘制波形部分程序如下:t=1:1:4;axes(Ch1_Dis);%Ch1_Dis 为坐标轴 1 句柄 hold on plot(t,ch1);axes(Ch2_Dis);%Ch2_Dis 为坐标轴 2 句柄 hold on plot(t,ch2);axes(Ch3_Dis);%Ch3_Dis 为坐标轴 3 句柄 hold on plot(t,ch3);但是每次通过串口触发回调函数 instrcallback 时,执行到 plot 指令都会另建一窗口 figure1,将波形绘制到另建的窗口中。18 当不通过串口触发回调函数,而是在一按钮的回调函数中调用当不通过串口触发回调函数,而是在
25、一按钮的回调函数中调用 instrcallback时,就会把波形绘制到指定坐标轴中。时,就会把波形绘制到指定坐标轴中。5-1、GUI 中实现在图片任意位置上中实现在图片任意位置上标注标注 text 利用 gtext 函数。gtext displays a text string in the current figure window after you select a location with the mouse.gtext(string)waits for you to press a mouse button or keyboard key while the pointer is
26、within a figure window.Pressing a mouse button or any key places string on the plot at the selected location.5-2、使用、使用 edit 的另外一种的另外一种 callback 如果 edit 是多行的。想点击每一行的时候,能执行不同的事件,那么可以使用:代码代码:contents=get(hObject,String);a=contents(get(hObject,Value)那么 a 就是你选择的对应的那一行。6、MATLAB 如何实现如何实现图像的任意裁减图像的任意裁减?(1)使
27、用使用 imrect 和和 imcrop 函数相结合函数相结合,就可以实现就可以实现截图功能。截图功能。用 imcrop 函数,例如:I=imread(circuit.tif);I2=imcrop(I,60 40 100 90);figure,imshow(I)figure,imshow(I2)见自己编写的程序:picturecrop。(2)剪取图像的中间区域:)剪取图像的中间区域:我想裁剪图像中间的部分,就是去掉图像周围部分!19 1、首先取得图像的显示范围:x1=get(gca,xlim);y1=get(gca,ylim);width=x1(1,2)-x1(1,1);height=y1(1
28、,2)-y1(1,1);2、求的图像中心的坐标:x0=x1(1,1)+width/2;y0=y1(1,1)+height/2;3、如果想剪切图像显示区域的 1/4(以图像中心向四周剪切),则:a=width/4;b=height/4;4、计算裁剪区域:(以图像中心点为裁剪中心)rect=x0-a/2 y0-b/2 a b 5、用 imcrop 裁剪:a=imcrop(A,rect);7、坐标轴坐标轴标注刻度标注刻度、网格网格、文字方向、文字方向 用两个矩阵画了一个图像,用 grid on 添加了网格,但是默认的网格太稀了,想要密一点的,该怎么解决?1、用 set(AX,XMinorGrid,o
29、n);set(AX,XMinorGrid,on);2、(1)控制坐标轴尺度长度:set(gca,XLim,-pi/2 pi)(2)定制自己想标注的刻度:set(gca,XTick,-pi/2:pi/4:pi)%坐标轴最小值,步长,最大值 3、xlabel(x 轴轴,rotation,45);%x 轴文字的方向,轴文字的方向,0 为水平方向,为水平方向,90为垂直方向为垂直方向 4、将坐标的、将坐标的 x 轴做成轴做成 10 的的 4 次方,而不是次方,而不是 10000 这种形式。这种形式。20 set(gca,xlim,0 10e4);8、Matlab 中对中对 uitable 的操作:调节
30、各列宽度,设定某列是可编辑的的操作:调节各列宽度,设定某列是可编辑的 解决办法:解决办法:例子:例如想建立三行三列的 table,并且要求第三列是可编辑的,其它两列是不可编辑的,代码如下:f=figure(Position,100 100 400 150);dat=6.125,456.3457,2.30;.%初始化各列的数值 6.75,510.2342,1.31;.7,658.2,3.52;columnname=Rate,Amount,Value;%各列的名称 columnformat=numeric,bank,numeric;%各列的数据类型 columneditable=false fal
31、se true;%各列是否是可编辑的,true 是可以编辑,false 是不可编辑 t=uitable(Units,normalized,Position,.0.1 0.1 0.9 0.9,Data,dat,.ColumnName,columnname,.ColumnFormat,columnformat,.ColumnEditable,columneditable);显示结果如下:其中,第三列的数值是可以编辑的。21 9、将在、将在 Matlab 下下编写的编写的 GUI 转成独立于转成独立于 Matlab 平台的应用程序平台的应用程序 将在 Matlab 下编写的 GUI 转成独立于 Ma
32、tlab 平台的应用程序Standalone Application。具体过程:具体过程:目的是把一个 Matlab GUI 转成 Standalone Application 即不在Matlab 平台下也可打开。用的 GUI 文件见:单纯形法实现(GUI based on Matlab)http:/ 首先新建:FileNewDeployment Projiect,出现如下界面:选择 Standalone Application 22 在 main function 中添加要转化的 M 文件:单击 Build project 等待编译完成:23 编译完成后,在工作目录下会生成相关项目的文件夹:
33、其中 distrib 中有生成的.exe 文件:运行该.exe 文件即可(这个.exe 文件就是一个 Standalone Application)。最后生成的 Standalone Application:attach8930/attach 24 10、要将用要将用 Matlab 语言编写的函数文件编译成可独立执行的语言编写的函数文件编译成可独立执行的*.exe 文件文件 要将用 Matlab 语言编写的函数文件编译成可独立执行的*.exe 文件(即可脱离 Matalab 环境的执行程序),首先要安装和配置好 Matlab Compiler,一般来说,在安装 Matlab 时就已经安装了相应
34、版本的 Matlab Compiler。只是不同版本的 Matlab,其编译器的使用方法有一定的差异,这一点要引起一定的注意。在确定安装好 Matlab Compiler 后,还需要对 Compiler 进行适当的配置,方法是在 Matlab 命令窗口输入:Mbuild setup 然后根据提示执行相应的操作,使用者可根据自己计算机中现有编译器的情况选择合适的编译器,如 VC+6.0、VC+7.0、Bland C 的编译器等,目前 Matlab 好象还不支持 VC+8.0(我计算机安装的就是 VC+2005,Matlab就无法识别)。当然,如果你的计算机里根本就没有安装其他任何语言的编译器,也
35、可选择 Matlab 自带的 Lcc 编译器,其实这个编译器对大多数用户已经够用了(我就是选择的 Matlab 自带的 Lcc 编译器)。配置好编译器后,自然就是对自己编写的 M 文件进行编译了。将 M 文件编译为独立可执行文件的语法是:mcc m fun1.m fun2.m.其中 fun1 就是最后的可执行文件的名称。另外,也可通过采用命令开关-o 指定编译最终目标文件的名称,如 mcc m main.m o mrank_main,就是将编译后的文件指定为 mrank_main.exe。编译后的生成文件根据编译器的版本不同而不同。具体的可参阅相关资料。25 如果要在没有安装 matlab 的
36、计算机上执行编译后的程序,首先要将MATLAB701toolboxcompilerdeploywin32 中的MCRinstaller.exe 安装到该计算机上(7.0 以前的版本是mglinstaller.exe)。其次是要将MCRinstaller.exe 安装目录runtimewin32这个路径添加到该计算机的环境变量中,添加的方法是:右击我的电脑属性高级环境变量添加指定一个变量名,然后将上述路径复制到里面就可以了。第三步是将编译生成的相相关文件拷贝到同一目录下(当然其他目录亦可)。第四步是打开 MS-dos 操作窗口,进入到编译后的*.exe 程序所在的目录,执行编译生成的*.exe
37、文件即可。需要说明的一个问题:如果你的程序还附带有图片(如 Version 上的图标)、Web 页面(如help 文档),在编译的时候可能无法与 M 文件一起编译(因为我没有试过,也没有看到有关这方面的介绍),这没有关系,先在计算机上执行一次你编译后生成的独立可执行文件,这时在同一目录下会生成一个以你编译后的程序名+_mcr 结尾的文件夹,这时,你只需要把与程序相关的图标和 Web 页面拷贝到该文件夹中的Matlabprogram 下面的一个子目录(一般与用于编译的文件夹名相同)中即可。其他的方法还有:(以下是网上搜索到的方法,没有试验过,有兴趣的朋友可以试一试)方法一:在 matlab 下的
38、 workspace 里打 comtool,点 file-open 26 project 将我们先前建好的 comtest.cbl 工程文件打开,再点component-package component就实现了打包,此时到comtestdistrib文件夹里看,生成的 comtest.exe 就是打包后的解压程序,双击它会解压出一些文件,再点击解压出来的_install.bat 就可以实现安装 方法二:如何将 gui 生成 exe?已有 gui.m 文件和 gui.fig 文件 1 在 matlab 的 command 窗口中输入 mcc-B sgl GUI.m 2.将上步生成的文件包括*.
39、m 文件和*.fig 文件一起考到待运行的机器 此时仍需 matlab 所必需的动态连接库。3.将/extern/lib/win32/mglinstallar.exel 拷贝到到待运行机器上 4.在机器上先运行 mglinstallar.exe,然后选择解压目录,将在指定目录下解压缩出 bin 和 toolbox 两子目录,其中在 binwin32 目录下就是数学库和图形库脱离 MATLAB 运行所需的所有动态连接库,共有 37 个。可以将这些.dll 考入 system32,也可以直接放在应用程序目录下。而 toolbox 目录则必须与应用程序同一目录。5.大功告成。matlab 生成独立可
40、执行的程序生成独立可执行的程序 引用 灵梦捕手 的 matlab 生成独立可执行的程序 27 一、生成独立可执行的程序(exe 文件)步骤 1、安装编译器。可有多种选择,本机安装的是 microsoft visual c+6.0;2、设置编译器。在 matlab 命令行输入 mbuild-setup,选择安装的 c 编译器;3、调用编译器。输入 mcc-m filaname,filaname 为要转成 exe 的 m 文件;在以前的版本中,用编译命令 mcc-B sglcpp filaname;自 2006 的版本后,替换为 mcc-m filaname;4、安装 MATLAB7toolbox
41、compilerdeploywin32 目录下的MCRInstaller。二、脱离 matlab 运行可执行程序 MCR 是由 matlab 的运行环境,占用不到 400M 的对于用不同 matlab 版本生成的 exe 文件,MCR 版本也会有不同,因此,在程序打包时,最好将相应版本的 MCR一起打包。MCR 环境的设置文件存放目录如下:MATLABR2007atoolboxcompilerdeploywin32 文件名为 MCRInstaller.exe。可将其拷贝到自己的文件夹中。在其它机器上运行 exe 文件前,首先安装 matlab 的运行环境。在同一机器上可以并存不同版本的 mat
42、lab 环境。Note:将 MCRInstaller.exe 拷贝到你文件所在文件夹里,用打包程序来打包,生成安装文件,设定在解包过程中自动执行 MCRInstaller.exe,同时将可执行文件的图标放在桌面。11、matlab GUI 程序转换成程序转换成 exe 可执行文件可执行文件 1.设置编译器:设置编译器:28 在确定安装好 Matlab Compiler 后,还需要对 Compiler 进行适当的配置,方法是在 Matlab 命令窗口输入:Mbuild setup,按提示选择 matlab 自带编译器 LCC。2.将脚本编译为可执行文件:将脚本编译为可执行文件:如项目文件包含:g
43、ui.m,gui.gif,fun1.m。在此路径下命令行输入:mcc m gui.m,生 成:mccExcludedFiles.log,ReadMe.txt,gui.ctf,gui.prj,gui_main.c,gui_mcc_component_data.c,gui.exe。其中:gui.ctf,gui.exe 为脱离 matlab 环境运行必需的文件。3.在未安装在未安装 matlab 的机器上运行可执行程序。的机器上运行可执行程序。将 R2 2007btoolboxcompilerdeploywin32 中的 MCRinstaller 安装到该计算机上,将生成可执行程序脱离 matlab
44、 运行所需的函数库。将 2 中生成的 gui.ctf,gui.exe 拷贝到该计算机同一路径。运行 gui.exe将生成 gui_mcr 文件夹,包含程序运行所需的库。至此完成。4.去除独立可执行程序运行时的去除独立可执行程序运行时的“DOS 黑窗口黑窗口”。以上生成的 exe 程序运行时首先弹出一个 DOS 界面窗口,如果不需要其输出数据和错误信息,可将其去除。matlba 命令行输入:命令行输入:cd(prefdir)edit compopts.bat 此时此时 compopts.bat 打开,在文件最后添加:打开,在文件最后添加:set LINKFLAGS=%LINKFLAGS%-sub
45、system windows 如果程序比较复杂,易出现异常,则不建议去除这个 dos 窗口以便调试。29 另外,这个办法是适用于你用的编译器为 LCC,如果是其他的,那么所加语句有所不同 Microsoft Visual C/C+:set LINKFLAGS=%LINKFLAGS%/SUBSYSTEM:WINDOWS/ENTRY:mainCRTStartup Borland:set LINKFLAGS=%LINKFLAGS%-aa 5.遇到某些函数不能使用的问题。遇到某些函数不能使用的问题。我的程序中用到 vpa 函数,运行 gui.exe 出现:undefined method or fun
46、ction vpa for input argument type of double错误提示。而 gui.m 脚本在 matlab 环境可以运行。原因:百度搜到的信息为:matlab 不支持符号工具箱的编译。只好避开使用此函数。12、gui 生成独立的应用程序的发布问题生成独立的应用程序的发布问题 将 MCRInstaller.exe 文件、file.ctf 文件和 file.exe 文件打包,粘贴至目标机器上后,解压,运行 MCRInstaller.exe,将 file.exe 和 file.ctf复制到应用目录下,添加目录runtimewin32 到用户系统路径(为 MCR 安装路径。)
47、1)这就话中将 file.exe 和 file.ctf 复制到应用目录下是只哪个应用目录;2)添加目录runtimewin32 到用户系统路径(为 MCR 安装路径。)怎样添加目标到用户系统路径。问题 1:.exe 和 ctf 在同一个目录就可以,就是只要在同一个文件夹就行的。问题 2:用户系统路径的添加是在环境变量里,我的电脑属性高级环境变量,添加即可。30 13、GUI 控制控制 simulink 模块及参数的综合实例!模块及参数的综合实例!最近在论坛上学习,虽然进度很慢,但收获不少!现在将我在学习过程中对于GUI控制simulink时遇到过困难的一些功能做成一个综合实例放在这里,打个包希
48、望给大家省点钱,也希望能够帮助到论坛里需要的朋友!同时以此感谢在我学习的过程中热心帮助过我的朋友们,感谢论坛!GUI and Simulink.rar(14.88 KB)该实例主要功能:1、演示了 GUI 界面的布局和效果;2、演示了 togglebutton、pushbutton 对 simulink 模块参数的设置方法;3、演示了 Edit text 和 slider 的联合使用,及利用 edit text 和 slider 对 simulink 参数的动态修改;4、演示了 simulink 参数在 GUI 上的显示和更显;5、语句进行了注释,为便于编译没用中文,大家凑或者看吧!管理员:会
49、员 RayneZ 提醒:该帖子的楼主贴了一个 GUI+Simulink 的示例文件,但是有些小错误,matlab 在运行的时候提示出错。检查了一下,错误原因在 GUI_ex11.mdl 这个文件中的 fcn2 模块中的函数编写有些问题 第四行和第六行的逻辑判断语句中的&应该改为&更改后程序可以正常运行。31 13-1、在、在 axes 显示图像后,在图像上单击鼠标时,回调函数的定义规则和使用显示图像后,在图像上单击鼠标时,回调函数的定义规则和使用方法方法 想在一个 axe 上显示一张图,在点击的时候放大图片我使用的是 imshow 函数。当没有显示图像的时候,单击 axe 有反应,但是一旦 i
50、mshow 之后单击就没有任何反应了请问怎么解决呢?解决办法:解决办法:调试了一下,可以解决的。方法如下:(1)在你的 GUI 的 OpeningFcn 函数中加入如下代码:axes(handles.axes1);Image=imread(C:UsersliuhuanjinPictures5HPQ1IFA00AN0001.jpg);%读取图像 hImage=image(Image);%显示图像,同时取得图像的句柄(handle)handles.hImage=hImage;%保存图像的句柄到 handles 结构,以备后用 guidata(hObject,handles);set(hImage,