登录论坛

查看完整版本 : 在GUI中数据的传递


hualiangzi
2008-05-07, 09:02
各位高手,我是在GUIDE中设计界面的,但我发现里面的数值或者说函数,总是不易传递。
比如说,我在一个pushbutton的callback的语句下写命令得到了一个向量,我现在要将这个向量的值传递到 “function 界面名_OpeningFcn(hObject, eventdata, handles, varargin)”语句下来供调用,请问各位高手怎么实现。
我想这也是很多GUI初学者都想知道的。望高手能人学者给出一些易懂的方案。发在论坛上,让我们这些初学者进步更快。
谢谢!

newshowfun
2008-05-07, 15:48
可以考虑使用全局变量,global命令,自己help global一下

hualiangzi
2008-05-07, 23:12
我试了一下,好像不行,能不能说的更具体,或者还有其他的方法吗?

newshowfun
2008-05-08, 08:50
在pushbutton-callback函数外,即界面的m文件中,利用global 定义你那个需要传递的向量。

hualiangzi
2008-05-08, 09:32
首先非常感谢你的回复,可我做了,确实不行。我现在把我的主程序贴过来,你看看是不是这么回事。如下:
% --- Executes just before shi is made visible.
function shi_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to shi (see VARARGIN)
x=I;
X=fft(x);
handles.current_data=x;
plot(handles.current_data);

% Choose default command line output for shi
handles.output = hObject;

% Update handles structure
guidata(hObject, handles);

% UIWAIT makes shi wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = shi_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{1} = handles.output;


% --- Executes on button press in dakai_pushbutton.
function dakai_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to dakai_pushbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
H={'*.wav'};
[filename,pathname]=uigetfile(H,'请选择需要打开的声音');
file=strcat(pathname,filename);
I=wavread(file);
sound(I);
global I;


% --- Executes on button press in huatu_pushbutton.
function huatu_pushbutton_Callback(hObject, eventdata, handles)
% hObject handle to huatu_pushbutton (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
plot(handles.current_data);
我现在要用到向量I的值(正如上面我想调用它一样),可准是显示错误:找不到I的值。到底怎么办啊?

tpwxhfh
2008-05-09, 09:09
在用global定义变量时,需要在每一个用到此变量的callback下,都定义一次这个变量。
比如说,你调用的变量名称是aa
那么凡是有用到aa变量的callback程序下,都要用global定义aa,即是global aa(只在GUI的m程序里定义就可以了)

hualiangzi
2008-05-09, 09:49
高手tpwxhfh,我看你是刚注册的号,没想到你一进来就点中要旨,这个问题就解决了。特别感谢你。谢谢!当然也谢谢上面回复信息的人。谢谢你们无私的帮助。

jackcgz
2008-05-14, 10:07
用userdata哦:biggrin:

ctgu2004
2009-04-27, 11:10
定义成global变量,在这个变量的出现地方和所有需要使用的地方都定义成global就可以了