gui生成的fig图像,为什么双击打开会出错
我用gui向导编写了一个程序,用gui向导打开时,运行正常,但是双击保存的.fig文件打开时,命令窗口报错:Attempt to reference field of non-structure array。下面是我编写的一个找错的简单例子untitled1.m:它有一个可编辑框和一个按钮它们的tag分别为out和sure
(1)untitled1_OpeningFcn中代码如下:
handles.output = hObject;
set(handles.out,'string','output');
% Update handles structure
guidata(hObject, handles);
(2)sure_Callback中代码为:
set(handles.out,'string','output with button ');
运行时编辑框中输出output,点击按钮输出output with button,运行正常。
若双击untitled1.fig,生成可视界面,但编辑框中无文字,点击按钮命令窗口报错:Attempt to reference field of non-structure array
(3)我猜想可能是双击时要调用out_CreateFcn函数,所以在它里面添加代码:
set(handles.out,'string','output with the CreatFcn function');
结果是编辑框中出现output,而且报错:Attempt to reference field of non-structure array
有谁可以帮忙解决一下这个问题,最后能说明一下gui程序的执行过程,如是先执行opening函数还是各个初始化函数,或者有的初始化函数根本就不执行,谢谢
回复 楼主 的帖子
一般都是先打开matlab然后利用matlab打开 是,打开matlab后,双击current Directory下的.fig文件,会出错。 今天试了一上午,有了一点收获,写出来和大家分享,如有错误,希望大家可以给以指正。
首先是gui的执行顺序:(1)在gui向导下打开,先执行各个控件的creat函数,执行时再次执行各个控件的creat函数,后是opening函数,之后是响应控件的 操作(2)双击打开.fig文件时,先执行各个控件的creat函数,后响应控件的操作,即不执行opening函数。至于产生上述区别的原因还不知道。
我的程序的错误应该是在gui向导打开时,执行了opening函数,对应opening函数来说,handles.out是它的局部变量,可以使用。而对于out_Creat函数来说它的控件的句柄是hObject,它不知道handles.out是什么,sure_callback更不知道了。所以可以在out_Creat函数中写入handles.out=hObject;guidata(hObject,handles);这样在其它callback函数中引用就没问题了。
说的有些乱了,总之就是在跨函数使用变量时要用handles定义。
页:
[1]