【问题标题】:saving temporary data on matlab gui在matlab gui上保存临时数据
【发布时间】:2017-02-13 06:56:37
【问题描述】:

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

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

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

*我只想在代码打开时保存该数据,以防我需要更多计算。我不想使用保存功能保存数据,然后在该文件夹中保存 MAT 文件。

谢谢。

【问题讨论】:

    标签: database matlab user-interface save


    【解决方案1】:

    您可以通过不同的方式将数据附加到特定的 GUI 对象

    1.使用用户数据

    GUI 对象的属性UserData 可以存储您选择的变量(要存储多个变量,只需将它们收集在结构、单元格或数组中。 使用get 或set 数据的对象句柄。例如,设置/获取带有标签 edit1

    的编辑文本框的 UserData
    set(handles.edit1, 'UserData', 2)
    get(handles.edit1, 'UserData')
    ans = 
         2
    

    请注意,在回调中您可以编写 hObject 来获取当前句柄。

    2。使用应用程序数据

    一个非常相似的方法是使用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

    另一种变体是将单个变量(如 UserData)分配给主 GUI 图,而不是分配给特定句柄。这是通过使用guidata 完成的。没有使用键/名称来设置数据。

    guidata(anyHandleInGUI, myData)
    

    第一个输入是主图形句柄或其任何子句柄。

    guidata(handles.edit1, 5)
    guidata(handles.edit1)
    ans =
         5
    

    假设你的按钮有标签pushbutton1。由于guidata 定位到根父节点(图形句柄),因此您可以使用其句柄获取相同的数据。

    guidata(handles.pushbutton1)
    ans =
         5
    

    【讨论】:

    • 有没有办法只将数据添加到变量中而不是 GUI 对象中?因为我希望它在单击一个对象后工作,但将其保存为全局变量以备下次我需要它时使用。
    • @ben 也许您应该查看persistent 变量。这些值在调用之间保持不变。使用isempty 查看是否设置了变量,否则更新它。另一种选择是 global 变量,但应该小心处理,因为它很容易搞砸
    猜你喜欢
    • 2014-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-05
    相关资源
    最近更新 更多