MATLAB:从外部调用GUI / GUIDE函数

时间:2009-06-17 21:43:08

标签: user-interface matlab function-handle

当我尝试在GUI / GUIDE文件中调用子函数时(使用已作为全局变量公开的函数句柄),即使我将轴设置为GUIDE中的特定轴,也始终会创建新轴数字。有谁知道为什么会这样? GUIDE代码是:

###############################################################
function varargout = demo(varargin)
  % Begin initialization code - DO NOT EDIT
  gui_Singleton = 1;
  gui_State = struct('gui_Name',       mfilename, ...
                     'gui_Singleton',  gui_Singleton, ...
                     'gui_OpeningFcn', @demo_OpeningFcn, ...
                     'gui_OutputFcn',  @demo_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

function demo_OpeningFcn(hObject, eventdata, handles, varargin)
  handles.output = hObject;

  % Update handles structure
  guidata(hObject, handles);

  global myhandles updateFunction;
  myhandles = handles;
  updateFunction = @update;

function varargout = demo_OutputFcn(hObject, eventdata, handles) 
  varargout{1} = handles.output;

function pushbutton1_Callback(hObject, eventdata, handles)
  update();

function update()
  global myhandles;

  axes(myhandles.axes1);
  plot(1:2,1:2);

###########################################################################

当我这样做时(上面的文件外):

global updateFunction;
feval(updateFunction)

我总是在新创建的图形窗口中看到该图,而不是在GUI图中。为什么会这样?

2 个答案:

答案 0 :(得分:2)

我要尝试的第一件事是用以下内容替换更新功能:

function update
  global myhandles;
  plot(myhandles.axes1,1:2,1:2);

这将明确告诉PLOT函数绘制给定轴。如果这不起作用,请尝试将轴的'NextPlot'属性设置为'add'(可能在 demo_OpeningFcn 中):

set(myhandles.axes1,'NextPlot','add');

答案 1 :(得分:0)

默认情况下,使用GUIDE创建GUI时,Matlab会将与GUI关联的所有对象的“HandleVisibility”属性设置为“callback”。这意味着您无法将这些句柄设置为回调例程之外的任何位置(即来自命令行或外部函数)的当前图形或当前轴。

要解决此问题,您可以在所有绘图函数中明确指定相应的句柄,也可以将轴的“HandleVisibility”属性设置为“on”。这可以通过属性检查器逐个对象地完成,或者通过转到'工具 - >来完成整个GUI。 GUI选项......'并将'命令行可访问性:'更改为'打开'。