您可以用不同的方式
1.将数据传送到特定GUI对象使用的UserData
的GUI对象的属性UserData
可以存储您所选择的变量(存储几个变量只是收集它们的结构,细胞或阵列。 使用对象句柄get
或set
的数据。例如,设定/与标签获得编辑文本框的UserData EDIT1
set(handles.edit1, 'UserData', 2)
get(handles.edit1, 'UserData')
ans =
2
请注意,在回调中,您可以编写hObject
以获取当前句柄。
2.使用应用数据
一个非常simular方法是利用setappdata
和由此产生与该对象相关联的自己键值地图存储数据到GUI对象/处理。与UserData方法的区别在于,您可以创建多个不同的键值对(因此需要收集struct/cell/array中的所有内容并不是那么迫切)。
setappdata(handles.edit1, 'Foo', 1);
setappdata(handles.edit1, 'Bar', 3);
getappdata(handles.edit1)
ans =
Foo: 1
Bar: 3
getappdata(handles.edit1, 'Foo')
ans =
1
3.使用guidata
另一变型是分配单个varible(像的UserData)至主GUI图而不是一个特定的手柄。这是通过使用guidata
完成的。没有键/名称用于设置数据。
guidata(anyHandleInGUI, myData)
第一个输入是一个主要图形句柄或其任何子项。
guidata(handles.edit1, 5)
guidata(handles.edit1)
ans =
5
假设您的按钮具有标签pushbutton1。由于guidata
找到根父级(图形手柄),因此可以使用其手柄获取相同的数据。
guidata(handles.pushbutton1)
ans =
5
有没有办法将数据添加到一个变量而不是一个GUI对象?因为我希望它在单击某个对象后能够工作,但在下次我将需要它时将其另存为全局变量。 – Ben
@ben也许你应该看看['persistent'](https://se.mathworks.com/help/matlab/ref/persistent.html)变量。这些电话的价值保持在通话之间。使用'isempty'来查看是否设置了变量,否则更新它。 另一种选择是“全局”变量,但是应该小心处理,因为它很容易混淆 – NLindros