我有使用按鈕執行某些代碼的Matlab GUI。 所有這些工作,除了代碼達到循環,執行似乎並沒有進入。For Matlab within Matlab GUIDE
1)任何想法如何循環在Matlab GUIDE代碼的框架內實現?
2)有沒有一種方法可以使用斷點來調試GUI代碼(我只能通過'disp'語句來調試),因爲當我運行GUI時,斷點會被刪除。
閱讀了解決方案之後,我發現
(1)的發生是因爲該for循環索引沒有改變,因爲陣列 的長度,我是索引上,沒有發生變化。我在代碼中解釋了這一點。 (2)我的壞處是,我在運行GUI之前先放置斷點,當我用其他方式時,它打破了正常。
% Opening func
function Regression_OpeningFcn(hObject, ~, handles, varargin)
NoiseMin = -12;
NoiseMax = 10;
NoiseRes = 2;
handles.noiseMin = NoiseMin;
handles.noiseMax = NoiseMax;
handles.noiseRes = NoiseRes;
%**this executed when value changed in edit text box***
function noiseMinDbEditText_Callback(~, ~, handles)
handles.noiseMin = str2num(get(handles.noiseMinDbEditText,'String'));
% When GUI is running, following shows change from -12 sucessfully
disp(strcat('Noise Min = ',num2str(handles.noiseMin)));
function noiseMinDbEditText_CreateFcn(hObject, ~, ~)
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
%Similar code for noiseMax and noiseRes(not shown here)
`% Here, code enters the Pushbutton callback
function StartRegressionPushButton_Callback(~, ~, handles)
snr_res = handles.noiseRes;
% here, snr_vecs still shows [-12 2 10]
snr_vecs = [handles.noiseMin:handles.noiseRes:handles.noiseMax];
所以,基本上,當GUI運行,進入對應閔改變文本框中的值,最大值和RES SNR變量顯示我的變化,但只要我進入按鈕對話框,將改變值(在全局變量「句柄」中捕獲的)不顯示,因爲我在那裏的代碼中斷了。
對此有何幫助? [for循環問題出現,因爲我是基於snr_vecs陣列,這是不改變索引,並因此對於環路被執行,而不是因爲它應該是]
sedy
請提供您的代碼的詳細說明。從上面的描述我不能清楚地確定問題。 –
我不確定,但我認爲這是由matlab主函數處理的。或者,matlab gui可以有一個單獨的主循環。無論如何,看gui的主要功能,似乎功能主要是設置數字和回調。當我運行gui時,斷點消失的問題是我無法重現的。你有沒有嘗試重新啓動matlab?你在使用什麼操作系統?另外,你知道gui會在你設置它的時候運行,直到你關閉它,對吧?這意味着在此期間不能設置斷點。 – patrik
@patrik是的,在我按下運行按鈕之前,我甚至把斷點都放在了我的頭上。一旦我運行,GUI出現,我就可以進入代碼。這樣做我注意到了以下幾點: – user915783