MATLAB: вызов функций GUI / GUIDE извне - PullRequest
0 голосов
/ 18 июня 2009

Когда я пытаюсь вызвать подфункцию в файле 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);

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

А когда я делаю (внешний файл выше):

global updateFunction;
feval(updateFunction)

Я всегда вижу график во вновь созданном окне рисунка, а не на рисунке GUI. Почему это происходит?

Ответы [ 2 ]

2 голосов
/ 18 июня 2009

Первое, что я бы попробовал, это заменить функцию update на следующую:

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

Это в явном виде скажет функции PLOT для построения на заданных осях. Если это не сработает, попробуйте установить для свойства осей NextPlot значение add (возможно, в demo_OpeningFcn ):

set(myhandles.axes1,'NextPlot','add');
0 голосов
/ 05 апреля 2013

По умолчанию, когда вы создаете GUI с помощью GUIDE, Matlab устанавливает свойство 'HandleVisibility' всех объектов, связанных с GUI, на 'callback'. Это означает, что вы не можете установить эти дескрипторы как текущую фигуру или текущую ось из любого места вне подпрограмм обратного вызова (т. Е. Из командной строки или внешней функции).

Чтобы обойти это, вы можете либо явно указать соответствующий дескриптор во всех ваших функциях построения графиков, либо установить для свойства осей «HandleVisibility» значение «on». Это можно сделать для каждого объекта в отдельности через инспектор свойств или для всего графического интерфейса, перейдя в «Инструменты -> Параметры графического интерфейса ...» и изменив «Доступность командной строки:» на «вкл».

...