从昨天开始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编程的内容和解答相对较少,需要我们多查多看多试,总会成功的!