如何将参数传递给Matlab GUI文件

时间:2011-03-17 23:46:40

标签: user-interface matlab ui-guidelines


我是matlab的新手。在使用Matlab GUI时,我遇到了一个问题,如下所示。
。我希望有2个图形文件,一个图形文件调用另一个。我知道只要从第一个fig文件中调用第二个fig文件的名称,我们就可以调用第二个数字。但是,我也希望从一个fig文件发送一些参数到另一个。我需要发送参数并获取这些参数以便进行进一步处理。我还没有找到解决这个问题的方法。如果有人帮助我解决这个问题,我会很高兴。
提前感谢你

4 个答案:

答案 0 :(得分:7)

我发现有三种方法可以做到这一点:

方法1:如此使用setappdatagetappdata

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的实际了解并不是那么好,但能够找到thisthis,甚至是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.par1handles.par2

我假设您正在使用GUIDE生成GUI。您可以在figure2.m中找到figure2_OpeningFcn,它将与figure2.fig位于同一目录中。

注意:您还可以返回数字returnvalue = my_figure({my_input})中的值。如果您也喜欢这方面的说明,请发表评论,我会延长答案。