我有Matlab GUI,它使用执行特定代码的按钮。 所有这些都有效,除了当代码到达循环时,执行似乎没有进入。
1)任何想法如何在Matlab GUIDE代码的框架内实现循环?
2)有没有办法使用断点来调试GUI代码(只有我可以通过'disp'语句),就像我运行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
答案 0 :(得分:3)
使用Matlab指南
指南基本上只是创建无花果的工具。文件。所有你可以用指南做的,你可以自己编程。创建ui-elements手工就像使用指南一样简单(我实际上更喜欢以编程方式创建gui元素,因为我认为指南的编码很差)...
每个guide-elements都有它的回调,必须在某处编码,通常(我认为100%的时间)fig文件与.m文件同名。找到相应的.m
- 文件并转到您所关注的回调。在那里,您可以像在任何其他代码中一样简单地放置断点。
注意:您甚至可以更改代码而无需重新打开图形文件!
for循环或任何在常规代码中工作的东西适用于ui元素代码。
答案 1 :(得分:1)
句柄未更新的原因是在函数回调结束时缺少以下语句,其变量需要在其他回调中使用。
guidata(hObject,handles);
我修复了它并且效果很好。
sedy