0

我的程序从文件加载数据并生成图形,用户单击感兴趣的区域,然后完成分析并生成新图形。程序继续要求用户单击图像,直到用户按下e退出程序。

我希望生成的图形是一个从我的程序中获取数据的 GUI,但我似乎无法将该数据传输到 GUI 函数中。这是我的程序的一个简单示例:

load(data)
plot(x,y)
while 1%so that it continues asking for user interaction
     figure(1)
     'click on the point you want or press e to exit'
     [x1,y1,key]=ginput(1)

     f=score(x1,y1)
     %the above is a different function that gives us the data that I want to graph,
     %that are called xf,yf 

     %GUI plot
     figure(1)
     test_gui(xf,yf)

     if (key == 'e')
     display('End')
     break;
     else
     display('next point')
     end
end

我的test_gui.m样子是这样的:

function varargout = test_gui(varargin)
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
               'gui_Singleton',  gui_Singleton, ...
               'gui_OpeningFcn', @test_gui_OpeningFcn, ...
               'gui_OutputFcn',  @test_gui_OutputFcn, ...
               'gui_LayoutFcn',  [] , ...
               'gui_Callback',   []);
if nargin && ischar(varargin{1})
    gui_State.gui_Callback = str2func(varargin{1});
end

if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT


% --- Executes just before fft_guide is made visible.
function test_gui_OpeningFcn(hObject, eventdata, handles, varargin)


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

% Update handles structure
guidata(hObject, handles);

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


% --- Outputs from this function are returned to the command line.
function varargout = test_gui_OutputFcn(hObject, eventdata, handles) 

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


% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
plot (xf,yf)   

问题是当我点击“Push”按钮时,它没有绘制任何东西,所以我传递xf,yf变量的方式一定有问题。我想知道是否有人对我做错了什么有任何想法,我以前没有使用过 GUIDE,看来我迷路了。

4

1 回答 1

0

从您的代码的外观来看,xf并且yf从未定义,只是f(的结果score)。所以这可能就是你看不到任何情节的原因。

假设score转储xfyf进入工作区,您必须首先定义它们varargin,然后使用 将它们传递给回调函数handles,正如 Werner 评论的那样。

% --- Executes just before fft_guide is made visible.
function test_gui_OpeningFcn(hObject, eventdata, handles, varargin)
xf = varargin{0}; yf = varargin{1}; % Get xf and yf from input
handles.xf = xf; handles.yf = yf;  % Put the values in handles
guidata(hObject,handles);   % Save handles so you can use it anywhere in the GUI

在回调中:

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
plot (handles.xf,handles.yf)

我相信这应该可以工作,假设xf并且yf在传递给 GUI 函数之前被正确定义。

于 2013-09-11T18:47:32.690 回答