2016-10-05 530 views
0

我用按钮和编辑文本制作了一个GUI。 第一步是在编辑文本中输入初始数据,然后单击按钮。 点击按钮后,它会从API收集一些信息,然后进行一些长时间的计算并在表格中显示结果。在MATLAB上保存临时数据gui

但是,如果我更改了我的初始编辑文本,我仍想使用第一次点击时相同的API。

有没有办法保存数据并将其用于下一次按钮点击以节省计算时间,而不是每次都从API收集信息?

*我只想保存该数据只要代码打开,只是为了我需要更多的计算。我不想用保存功能保存数据,然后在该文件夹上有MAT文件。

谢谢。

回答

0

您可以用不同的方式

1.将数据传送到特定GUI对象使用的UserData

的GUI对象的属性UserData可以存储您所选择的变量(存储几个变量只是收集它们的结构,细胞或阵列。 使用对象句柄getset的数据。例如,设定/与标签获得编辑文本框的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 
+0

有没有办法将数据添加到一个变量而不是一个GUI对象?因为我希望它在单击某个对象后能够工作,但在下次我将需要它时将其另存为全局变量。 – Ben

+0

@ben也许你应该看看['persistent'](https://se.mathworks.com/help/matlab/ref/persistent.html)变量。这些电话的价值保持在通话之间。使用'isempty'来查看是否设置了变量,否则更新它。 另一种选择是“全局”变量,但是应该小心处理,因为它很容易混淆 – NLindros