2016-10-05 77 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