【问题标题】:how to pass parameters to a Matlab GUI file如何将参数传递给 Matlab GUI 文件
【发布时间】:2011-03-17 23:46:40
【问题描述】:


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

【问题讨论】:

    标签: user-interface matlab ui-guidelines


    【解决方案1】:

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

    方法一:像这样使用setappdatagetappdata

    setappdata(0,'some_var',value)
    some_other_var = getappdata(0,'some_var')
    

    您可以在 fig1 的 m 文件中使用 setappdata() 来存储您想要传递的任何数据,然后在另一个 m 文件中调用 getappdata() 来检索它。这两个函数的参数 0 指定了 MATLAB 根工作区,您的程序可以在任何地方访问它(即它是全局的)。因此,当您关闭数据时,数据仍然可用。您可能想使用rmappdata 删除它们。

    方法二:使用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 这样的好的资源。我在这里写的内容 可能有误,因此您绝对应该查阅文档以获得更多帮助。)

    【讨论】:

      【解决方案2】:

      我会这样做(假设您使用的是 GUI 构建器 GUIDE)。

      假设您的图形/m 文件名为 firstFigure.fig/msecondFigure.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是细胞结构;使用 cell2matchar 将其转换回来:

      theNumber = cell2mat(varargin(1));
      theText = char(varargin(2));
      theTextAgain = cell2mat(varargin(2));
      theMatrix = cell2mat(varargin(3));
      

      【讨论】:

        【解决方案3】:

        【讨论】:

          【解决方案4】:

          最简单的方法是将参数包装在一个元胞数组中,然后将它们直接发送到 GUI 构造函数。带有两个参数的调用可能如下所示:

          figure2({param1, param2})
          

          然后您可以使用如下代码解压缩打开函数(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}) 返回值。如果您也想了解这方面的说明,请发表评论,我会扩展我的答案。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2023-03-24
            • 1970-01-01
            • 1970-01-01
            • 2013-07-24
            • 1970-01-01
            • 2022-09-25
            • 1970-01-01
            • 2020-11-23
            相关资源
            最近更新 更多