2015-06-15 58 views
1

我有使用按鈕執行某些代碼的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

+0

請提供您的代碼的詳細說明。從上面的描述我不能清楚地確定問題。 –

+0

我不確定,但我認爲這是由matlab主函數處理的。或者,matlab gui可以有一個單獨的主循環。無論如何,看gui的主要功能,似乎功能主要是設置數字和回調。當我運行gui時,斷點消失的問題是我無法重現的。你有沒有嘗試重新啓動matlab?你在使用什麼操作系統?另外,你知道gui會在你設置它的時候運行,直到你關閉它,對吧?這意味着在此期間不能設置斷點。 – patrik

+0

@patrik是的,在我按下運行按鈕之前,我甚至把斷點都放在了我的頭上。一旦我運行,GUI出現,我就可以進入代碼。這樣做我注意到了以下幾點: – user915783

回答

1

處理未得到更新的原因在函數回調結束時缺少以下語句,其變量需要在其他回調中使用。

guidata(hObject,handles); 

我修正了這個問題,它工作的很好。

sedy

3

用Matlab導引

指南基本上只是一個創造無花果的工具。文件。你可以通過指導你做的事情可以通過編程來完成。手工創建UI元素就像使用指南一樣簡單(我實際上首選編程創建GUI元素,因爲我認爲指南編碼很差)...

每個指南元素都有它的回調,它們必須被編碼在某處,通常(我認爲100%的時間)fig文件與.m文件具有相同的名稱。找到相應的.m-文件並轉到您所插入的回調。在那裏,您可以像在任何其他代碼段一樣簡單地放置斷點。

注意:您甚至可以更改代碼而無需重新打開無花果文件!

For循環或任何在中工作的常規代碼適用於UI元素代碼。