对于Matlab指南中的循环

时间:2015-06-15 05:49:06

标签: matlab

我有Matlab GUI,它使用执行特定代码的按钮。 所有这些都有效,除了当代码到达循环时,执行似乎没有进入。

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运行时,输入和更改对应于min,max和res snr变量的文本框中的值会显示更改,但是只要我进入按钮对话框,就会显示更改的值(即在全局变量“handle”中捕获的)不会出现,因为我在那里打破了代码 对此有何帮助? [for循环问题出现了,因为我基于snr_vecs数组进行索引,这没有改变,因此循环正在执行,但不是应该如此]
sedy

2 个答案:

答案 0 :(得分:3)

使用Matlab指南

指南基本上只是创建无花果的工具。文件。所有你可以用指南做的,你可以自己编程。创建ui-elements手工就像使用指南一样简单(我实际上更喜欢以编程方式创建gui元素,因为我认为指南的编码很差)...

每个guide-elements都有它的回调,必须在某处编码,通常(我认为100%的时间)fig文件与.m文件同名。找到相应的.m - 文件并转到您所关注的回调。在那里,您可以像在任何其他代码中一样简单地放置断点。

注意:您甚至可以更改代码而无需重新打开图形文件!

for循环或任何在常规代码中工作的东西适用于ui元素代码。

答案 1 :(得分:1)

句柄未更新的原因是在函数回调结束时缺少以下语句,其变量需要在其他回调中使用。

guidata(hObject,handles);

我修复了它并且效果很好。

sedy