我是matlab的新手。在使用Matlab GUI时,我遇到了一个问题,如下所示。
。我希望有2个图形文件,一个图形文件调用另一个。我知道只要从第一个fig文件中调用第二个fig文件的名称,我们就可以调用第二个数字。但是,我也希望从一个fig文件发送一些参数到另一个。我需要发送参数并获取这些参数以便进行进一步处理。我还没有找到解决这个问题的方法。如果有人帮助我解决这个问题,我会很高兴。
提前感谢你
答案 0 :(得分:7)
我发现有三种方法可以做到这一点:
方法1:如此使用setappdata
和getappdata
:
setappdata(0,'some_var',value)
some_other_var = getappdata(0,'some_var')
你可以在m文件中使用setappdata()来存储你想要传递的任何数据,然后在另一个m文件中调用getappdata()来检索它。两个函数的参数0
指定了MATLAB根工作空间,您的程序可以在任何地方访问它(即它是全局的)。因此,当您关闭数据时,数据仍然可用。您可能希望使用rmappdata
删除它们。
方法2:使用guidata
:
假设您使用GUIDE创建了GUI,那么您可以访问名为handles
的结构,该结构在任何地方传递并且您可以编辑,因此您可以在GUI回调中执行此操作:
handles.some_var = some_value
guidata(hObject,handles)
然后你可以在其他m文件中访问其他地方的handles.some_var
其他回调(因为handles
会自动传递给你):
some_other_var = get(handles.some_var)
方法3:使用UserData
:
从第一个数字中存储您想要的变量:
set(name_of_fig, 'UserData', some_var)
然后从另一个人那里得到它:
some_other_var = get(name_of_fig, 'UserData')
(免责声明:我对MATLAB的实际了解并不是那么好,但能够找到this和this,甚至是this from the official docs这样的好资源也很有帮助。在这里写的可能是错的,所以你一定要查阅文档以获得更多帮助。)
答案 1 :(得分:2)
我会这样做(假设您正在使用GUI构建器 GUIDE )。
假设你的数字/ m文件名为 firstFigure.fig / m 和 secondFigure.fig / m 。在 firstFigure 的代码中,只需调用 secondFigure 并将参数作为参数传递:
someNumber = 1;
someText = 'test';
aMatrix = rand(3);
secondFigure(someNumber, someText, aMatrix);
secondFigure 中的参数可用作回调函数中的变量 varargin
function varargout = secondFigure(varargin)
和
function secondFigure_OpeningFcn(hObject, eventdata, handles, varargin)
varagin 是一种细胞结构;使用 cell2mat 和 char 将其转换回来:
theNumber = cell2mat(varargin(1));
theText = char(varargin(2));
theTextAgain = cell2mat(varargin(2));
theMatrix = cell2mat(varargin(3));
答案 2 :(得分:0)
答案 3 :(得分:0)
最简单的方法是将参数包装在单元数组中,并将它们直接发送到GUI构造函数。具有两个参数的调用可能如下所示:
figure2({param1, param2})
然后你可以使用以下代码解压缩open函数(figure2_OpeningFcn)中的参数:
handles.par1 = varargin{1}{1};
handles.par2 = varargin{1}{2};
这些行必须放在显示guidata(hObject, handles);
的行之前的某个位置。然后,您可以直接在所有其他回调中访问handles.par1
和handles.par2
。
我假设您正在使用GUIDE生成GUI。您可以在figure2.m中找到figure2_OpeningFcn,它将与figure2.fig位于同一目录中。
注意:您还可以返回数字returnvalue = my_figure({my_input})
中的值。如果您也喜欢这方面的说明,请发表评论,我会延长答案。