matlab GUI学习笔记3 如何添加axes并刷新计算结果,以及初始化axes的句柄。

这篇博客记录了MATLAB GUI中使用axes显示图像、刷新内容以及初始化句柄时遇到的问题和解决方案。作者提到在axes中添加图像、清除内容时需要使用cla或delete配合reset,以及如何在新界面打开时初始化handles。遇到的困难在于理解handles的使用和多界面交互。解决这些问题需要对MATLAB GUI有深入理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从昨天开始matlab GUI的编程需要用到图像显示了,也就是axes插件,里面涉及到很多问题,一一记录下来解决方法。

(1)首先添加axes,很简单。图像显示框的名称叫坐标轴,很容易误会。

(2)在axes中显示结果,即若点击计算按钮,在图像框中显示计算结果。

计算按钮的tag为pushbutton1,在其callback中获取输入参数,并进行计算,将得到的计算图像显示,用“axes(handles.axes1); plot(t*1e6*1e6,d);%匹配结果"语句,或直接使用“plot(handles.axes1,t*1e6*1e6,d);”,同理,使用imshow和imagesc语句是相同的操作。

***需要注意的是,axes的句柄只能使用handles,不可使用guihandles,否则会报错。

(3)刷新axes内容

当我更新部分参数,重新点击计算时,会报错“引用了不存在的字段 'axes1'”,但是我的axes1明明存在,而且第一次计算的时候显示并无问题,查找原因后,发现需要将axes1中显示的结果删除后才能重新正确显示。大家建议添加“刷新(pushbutton)”将之前的结果全部删除,但我想在计算按钮的基础上进行刷新,并不想再添加一个按钮,所以将清除axes内容的语句添加到“计算”按钮callback里。

清除axes内容的命令有很多,例如“cla”,“delet”,并将axes的NextPlot属性改为“replace”。在使用cla语句的时候也走了很多弯路,直接添加cla或cla(handles.axes1)依旧还会报错,需要添加reset,即“cla(handles.axes1,'reset');”,若axes存在多个且都需要清除的情况下,还可以使用“cla reset”语句。同样的,delet命令也需要添加reset。

(4)在主界面初始化axes的句柄

当我从主界面(software.fig)打开新的界面(pushbutton5.fig)并进行计算时,发现会报错,错误为:“结构体内容引用自非结构体数组对象  axes(handles.axes1)”,也能看出在不存在axes的新界面计算并在edit或text中显示内容时,并不会报错,而通过主界面打开存在axes的界面时,就报错。

这个问题我查了好久,最终在国外的问答网站上发现了原因:由guide生成的figure窗口必须通过在.m文件中“RUN”打开才可以正确运行,因为这样才会初始化handles句柄,通过fig打开,就不会产生handles的句柄,所以在多界面编程中,若要通过点击按钮打开一个新界面,用open(‘pushbutton5.fig’)只能应对不存在axes的情况,否则需要在主界面打开新界面时就对新界面的handles进行初始化。

注意:上述命令中的“close(h)”这个语句酌情删除,因为这个命令的存在导致新窗口打开的同时旧窗口关闭,若想保持旧窗口的打开状态就需要去掉这句命令。

*****************************************************************************************************

总结:第三个问题和第四个问题对于高手来讲可能是很简单的问题,对于小白来讲就很陌生且不好解决,花费了好长时间才解决这两个问题。国内对GUI编程的内容和解答相对较少,需要我们多查多看多试,总会成功的!

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值