如何从单独的 m 文件访问 MATLAB GUI 函数 - matlab

how to access MATLAB GUI functions from a separate m file - matlab

我有一个名为 main() 的函数。在这个 'main' 中,我调用了另一个函数 A()。 我有一个 GUIde,其中有一个变量 'number'。 如何从 A() 访问 'number' 或从 A() 更改 'number' 的值?

1- 下面的代码不起作用。

main(handles)
  %some code
  A(handles);

  function A(handles)
    set(handles.number,0);
  end
end

2- 这个也不行。

main(handles)
  %some code
  A(handles);

  function A(handles)
    handles.setNumberFnc(5);
  end
end


%%%%%in GUI i have this function.

function setNumberFnc(n)
  handles.number = n;
  guidata(hObject, handles);

我知道这个功能没有'hObject'我不知道怎么办?

3- 我可以在 GUI 和 A() 中使用 'Global number' 吗?

你解决问题的方式与我通常做的相反。对我来说,GUI 是主要对象,我定义了我的按钮回调等来调用外部脚本和函数。

您想 运行 一个单独的脚本或函数,然后修改 GUI。这个也不错!您所需要的只是 GUI 的句柄,例如,您可以使用 gcf 获得它(假设 GUI 是当前活动的图形 window)。然而,你的 setNumberFcn 是一个 local function (or possibly a nested function,这几乎是一回事),你不能从不同的脚本或函数文件中调用它。相反,您必须以

的方式将其放入 main.m 文件中
function main()

  fig_handle = gcf;
  numfield_handle = findobj(gcf, 'NumFieldTagThatYouDefinedInGUIDE');

  function setNumberFcn(numfield_handle, number)
      set(numfield_handle, 'String', num2str(number))
  end

end

我的问题已经解决了。 只需要在所有必要的函数中定义全局变量 'number' 。现在我可以轻松地在 GUI 或 A() 函数中更改 'number' 的值。 无需 'set' 功能。

main()
  %some code
  A();

  function A()
    global number;
    disp(number);
    number = 5;
  end
end

在 GUIde 中:

function B_Callback(hObject, ~, handles)
global number;
number = 2;
guidata(hObject, handles);