編輯:我改寫了一下我的問題,因爲我現在對問題有了更好的理解,第一稿中有很多不必要的信息。MATLAB GUI停止按鈕問題
我正在創建一個獨立的MATLAB應用程序,它需要一個可以啓動和停止循環腳本的切換按鈕。
在此基礎上helpful video,我能夠實現我的gui.m文件這樣的想法是這樣的:
function startBtn_Callback(hObject, eventdata, handles)
if get(handles.startBtn,'Value')
set(handles.startBtn,'String','Stop Recording');
else
set(handles.startBtn,'String','Start Recording');
end
while get(handles.startBtn,'Value');
disp('looping..');
pause(.5);
end
這個腳本工作正常,但是當我更換while循環功能的內容我想循環,按鈕停止工作。它在我按下時仍然會切換,但只有在第一次按下按鈕時纔會調用回調。這是我的最終代碼的樣子:
function startBtn_Callback(hObject, eventdata, handles)
if get(handles.startBtn,'Value')
set(handles.startBtn,'String','Stop Recording');
pause(.1);
else
set(handles.startBtn,'String','Start Recording');
disp('Recording Stopped')
end
while get(handles.startBtn,'Value');
myFunction();
end
當我按下開始按鈕時,此回調運行,循環開始。需要pause(.1)
才能更改文本 - 如果我不包含暫停,循環將啓動,但按鈕上的文本不會更改。
之後,沒有後續的按鈕推動任何事情。該按鈕在GUI上切換,但startBtn_Callback
永遠不會被調用,並且循環無限期地運行。這是一個問題,因爲我的最終用戶將無法訪問MATLAB控制檯。
爲了給我更多關於我的功能的信息:它記錄音頻5秒鐘,做一些處理,然後輸出一些圖形的方法。我希望這個循環能夠無限地重複,直到用戶停止。
我認爲問題是MATLAB似乎一次只能運行一個函數,所以當myFunction()
運行時,回調無法啓動。它在第一個例子中工作的原因是因爲循環調用之間存在暫停。我不能有這樣的停頓,因爲項目的要求是記錄每一秒鐘。
如何爲此過程製作可靠的停止按鈕?
我正在運行MATLAB R2012b 32位。
好的,我明白了這個問題。當我把查詢放回while行並在循環中更新a時,評估值爲0 ..爲什麼循環甚至運行? get查詢在while行中返回1,在a =行中返回0。 – Cbas
Nvm,在值更改之前啓動循環。在這種情況下循環沒有再次運行。儘管如此,仍然沒有解決主要問題,現在,由於某種未知的原因,我無法重新創建停止腳本運行的情況。 – Cbas