Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
User interface MATLAB:从外部调用GUI/GUIDE函数_User Interface_Matlab_Function Handle - Fatal编程技术网

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

User interface MATLAB:从外部调用GUI/GUIDE函数,user-interface,matlab,function-handle,User Interface,Matlab,Function Handle,当我尝试调用GUI/GUIDE文件中的子函数时(使用已公开为全局变量的函数句柄),即使我将轴设置为GUIDE图中的特定轴,也始终会创建一个新轴。有人知道为什么会发生这种情况吗?指南代码为: ############################################################### function varargout = demo(varargin) % Begin initialization code - DO NOT EDIT gui_Singl

当我尝试调用GUI/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);

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


我总是在新创建的图形窗口中看到绘图,而不是在GUI图形中。为什么会发生这种情况?

我要尝试的第一件事是用以下函数替换函数update

function update
  global myhandles;
  plot(myhandles.axes1,1:2,1:2);
这将明确告诉函数绘制到给定轴。如果不起作用,请尝试将轴的“NextPlot”属性设置为“add”(可能在demo\u OpeningFcn中):


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


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

我们应该看到更新功能。这对帮助你很重要。此外,全局变量通常是不需要的,并且常常使您的代码更难维护。您可能希望以不同的方式构造代码。
function update
  global myhandles;
  plot(myhandles.axes1,1:2,1:2);
set(myhandles.axes1,'NextPlot','add');