我是matlab的新手。在通过 Matlab GUI 工作时,我遇到了如下问题。
.我想要2个图形文件,一个图形文件调用另一个。我知道只要从第一个 fig 文件中调用第二个 fig 文件的名称,我们就可以调用第二个图。但是,我也希望将一些参数从一个无花果文件发送到另一个。这里我需要发送参数并获取这些参数以便进行进一步处理。我还没有找到解决这个问题的方法。如果有人帮助我解决这个问题,我会很高兴。
提前谢谢你
4 回答
我发现有三种方法可以做到这一点:
方法1:使用setappdata
和getappdata
喜欢这样:
setappdata(0,'some_var',value)
some_other_var = getappdata(0,'some_var')
您将在 fig1 的 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。我在这里写的可能是错误的,所以你应该一定要咨询文档以获得更多帮助。)
我会这样做(假设您使用的是 GUI 构建器GUIDE)。
假设您的图形/m 文件被命名为firstFigure.fig/m和secondFigure.fig/m。在firstFigure的代码中,只需调用secondFigure并将参数作为参数传递:
someNumber = 1;
someText = 'test';
aMatrix = rand(3);
secondFigure(someNumber, someText, aMatrix);
参数将作为回调函数中的变量varargin提供给secondFigure
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));
这可能会有所帮助: http: //www.mathworks.ch/matlabcentral/newsreader/view_thread/171989
最简单的方法是将参数包装在一个元胞数组中并将它们直接发送到 GUI 构造函数。带有两个参数的调用可能如下所示:
figure2({param1, param2})
然后您可以使用如下代码解压缩打开函数 (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})
. 如果您也想对此进行说明,请发表评论,我会扩展我的答案。