Main Content

guidata

存储或检索 UI 数据

说明

示例

注意

建议将 App 数据存储在主 App 图窗的 UserData 属性中(而不是使用 guidata),因为这样会产生更易读的代码。有关存储和共享 App 数据的详细信息,请参阅在回调之间共享数据

如果 obj 是图窗,则 guidata(obj,data) 将指定的数据存储在其应用程序数据中;如果它是另一个组件,则存储在 obj 的父图窗的应用程序数据中。有关详细信息,请参阅guidata 如何管理数据

示例

data = guidata(obj) 返回之前存储的数据,如果未存储任何内容,则返回空矩阵。

示例

全部折叠

创建一个编程 UI,当您点击它时,它会存储和检索计数器数据。

首先,创建一个名为 progCounter.m 的程序文件。在该程序文件中:

  • 创建一个图窗。

  • 创建一个结构体,其中一个字段值初始化为零。

  • 将数据存储在该图窗中。

  • 定义一个回调函数,该回调函数从图窗中检索数据,更改数据,并在图窗中再次存储新数据。

运行程序并在图窗内点击。更新后的数据出现在命令行窗口中。

f = figure;
data.numberOfClicks = 0; 
guidata(f,data)
f.ButtonDownFcn = @My_Callback;

function My_Callback(src,event)
data = guidata(src);
data.numberOfClicks = data.numberOfClicks + 1;
guidata(src,data)
data
end
data = 

  struct with fields:

    numberOfClicks: 1

在 GUIDE 中创建一个按钮,在按下该按钮时会存储和访问数据。为此,请先在 handles 结构体中添加一个字段,然后使用 guidata 对其进行更新和管理。(请确保将数据添加到 handles,而不是覆盖它。有关详细信息,请参阅GUIDE 如何使用 guidata。然后,配置一个回调,用以在按下该按钮时使用 guidata 访问和存储数据。

为此,请首先打开 GUIDE,并在布局区域添加一个普通按钮。然后,点击编辑器图标以打开程序文件进行编辑。找到 GUIDE 自动创建的 OpeningFcn,并向 handles 添加名为 numberOfClicks 的新字段。

% --- Executes just before countClicks is made visible.
function countClicks_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to countClicks (see VARARGIN)

% Choose default command line output for countClicks
handles.output = hObject;

handles.numberOfClicks = 0;

% Update handles structure
guidata(hObject, handles);

接下来,找到 GUIDE 创建的普通按钮回调函数。对其进行编程以访问存储在 handles 中的数据,对其进行修改,将更改后的数据保存到结构体中,并在命令行窗口中显示新数据。请注意,在 GUIDE 中,您使用 hObject(而不是 src)来引用正在执行其回调的对象。

% --- Executes on button press in pushbutton1.
function pushbutton1_Callback(hObject, eventdata, handles)
% hObject    handle to pushbutton1 (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

handles.numberOfClicks = handles.numberOfClicks + 1;
guidata(hObject,handles)
data = guidata(hObject)
>> countClicks

data = 

  struct with fields:

           figure1: [1×1 Figure]
       pushbutton1: [1×1 UIControl]
            output: [1×1 Figure]
    numberOfClicks: 1

输入参数

全部折叠

图形对象,如 FigureAxesIllustration,或 UI 对象。使用此参数指定存储 data 的图窗。如果指定的对象不是图窗,则该对象的父图窗将用于存储 data

要存储在图窗中的数据,指定为任何 MATLAB 数据。通常,data 指定为结构体,以便您根据需要添加新字段。例如,创建具有名为 Category 的字段的数据结构体,将来自字段的数据存储在该结构体中,并在命令行窗口中显示存储的数据:

data.Category = 'Projected Growth';
guidata(gcf,data);
data = guidata(gcf)

算法

全部折叠

guidata 如何管理数据

无论何时,guidata 都只能管理每个父图窗中的一个变量。对 guidata(obj,data) 的后续调用会覆盖之前存储的数据。通过创建具有多个字段的结构体来存储更多数据。

GUIDE 如何使用 guidata

GUIDE 使用 guidata 来存储和维护称为 handles 的结构体。在 GUIDE 代码文件中,请不要覆盖 handles 结构体,否则您的程序将不再有效。如果您需要存储其他数据,可通过向 handles 结构体中添加新字段来执行此操作。

版本历史记录

在 R2006a 之前推出