资源预览内容
亲,该文档总共2页全部预览完了,如果喜欢就下载吧!
资源描述
GUI 界面之间的参数传递方法(1-3)今天,研究了一下不同 GUI 之间的参数传递方法,Matlab 中 GUI 之间参数传递不如 VC 一 样简单,易于理解,但是如果理解了,也是有章可循的,传说的具有六种方法,介绍其中 的一种,如下所示: *运用 gui 本身的 varain、varaout传递参数。 上面介绍的方法只是适用于主从 GUI 之间传递参数,即从主 GUI 调用子 GUI,然后关掉 子 GUI,子 GUI 的参数就传递到了主 GUI,比如子 GUI 的名称为 subGUI, 设想的参数输 入输出为:out1, out2 = subGUI(in1, in2) 在 subGUI 的 m 文件中(由 GUIDE 自动产生) ,varargin 和 varargout 分别是一个可变长 度的 cell 数组(MATLAB 帮助文件中有说明)。输入参数 in1 和 in2 保存在 varargin 中,输出 参数 out1,out2 包含在 varargout 中;在 subGUI 的 OpeningFcn 中,读入参数,并用 guidata 保存,即:handles.in1 = varargin1;handles.in2 = varargin2; guidata(hObject, handles); 返回参数的设置: 1. 在 GUI 子程序的 OpeningFcn 函数的结尾加上 uiwait(handles.figure1); figure1 是 subGUI 的 Tag; 2. subGUI 中控制程序结束(如“OK”和“Cancel“按钮)的 callback 末尾加上 uiresume(handles.figure1),不要将 delete 命令放在这些 callback 中; 3. 在子 GUI 的 OutputFcn 中设置要传递出去的参数,如 varargout1 = handles.out1;varargout2 = handles.out2;末尾添加 delete(handles.figure1); 结束程序。 在 GUI 的 OpenFcn 中,如果不加 uiwait, 程序会直接运行到下面,执行 OutputFcn。也就 是说程序一运行,返回值就确定了,再在其它部分对 handles.output 作更改也没有效果了。 加上 uiwait 后,只有执行了 uiresume 后,才会继续执行到 OutputFcn,在此之前用户有充 分的时间设置返回值。 通过以上设置以后,就可以通过 out1, out2 = subGUI(in1, in2) 的形式调用该子程序。 在一个 GUI 中调用另一个 GUI 时,主 GUI 不需要特别的设置,同调用普通的函数一样。 在打开子 GUI 界面的同时, 主程序还可以响应其它的控件。不需要担心子 GUI 的返回值被传错了地方。 综上所述:一是,两点需要注意,uiwait 和 uiresume 的使用位置和使用时机,二是,delete 句柄的位置通过以上设置以后,就可以通过 out1, out2 = subGUI(in1, in2) 的形式调用该子程序。在一个 GUI 中调用另一个 GUI 时,主 GUI 不需要特别的设置,同调用普通的函数一样。 在打开子 GUI 界面的同时,主程序还可以响应其它的控件。不需要担心子 GUI 的返回值 被传错了地方。success哈哈方法二 延续以前的博文,今天介绍一下方法二,利用 setappdata 和 getappdata 函数进行不同 GUI之间的参数传递问题。getappdata 函数,VALUEgetappdata(H,NAME);setappdata 函数, setappdata(H,NAME,VALUE)。具体地应用如下所示: 当在主子 gui 内调用时,可以如下设置:fig1 调用 fig2 时,使用 fig2 指令来打开 fig2,在 fig2 的 m 文件中,在回调函数中用 setappdata(fig1,A,A)实现返回 fig1,并将参数 A 传递给 fig1,然后在 fig1 的使用 A 的地方添 A=getappdata(fig1, A ) 。但这种方式的一个问题 就是没调用一次,fig1 的数据就得初始化一次,这是因为 setappdata(fig1,A,A)中出现了 fig1,调用一次 setappdata 就得运行一次 fig1 的缘故,解决方案就是把 setappdata(fig1,A,A) 改为 setappdata(0,A,A),这样把 A 读入 matlab workspace,相当于一个全局变量了,但当 然比直接用 global 定义全局变量好!必须注意的是:在主程序和子程序中均要用 0,否则 不管用 此方法和第一种的不同即:第一种是启动主程序后,再启动子程序,进行设置参数,而这 一种方法是先启动子程序,设置好参数后,启动主程序,这是参数已经传到主程序方法三 前面有了两种方法了,今天就研究一下第三种方法,这种方法在 GUI 内的数据传递也是比 较常用的:全局变量。 这种方式恐怕是最简单的方式,是很省心!但是,简单的问题就在于有时你会很头疼! 因为在每一个要到该全局变量的地方,你都要添一句 gloal x,还有就是如果你在一个地方 修改了 x 的值,那么所有 x 的值就都变了!有的时候恐怕会出现紊乱。另一个更重要的问 题在于,套用 C+的一句话,全局变量破坏了程序的封装性!所以,全局变量是能少用尽 量少用。 不过因为简单,一般的小程序,还是会经常用到的
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号