即将开始 发表于 2008-6-5 08:33

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函数还是各个初始化函数,或者有的初始化函数根本就不执行,谢谢

sigma665 发表于 2008-6-5 09:25

回复 楼主 的帖子

一般都是先打开matlab
然后利用matlab打开

即将开始 发表于 2008-6-5 09:43

是,打开matlab后,双击current Directory下的.fig文件,会出错。

即将开始 发表于 2008-6-5 15:30

今天试了一上午,有了一点收获,写出来和大家分享,如有错误,希望大家可以给以指正。
首先是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]
查看完整版本: gui生成的fig图像,为什么双击打开会出错