我想创建一个前端,用户可以按Enter键向前浏览图片。 伪代码
hFig=figure
nFrames=5;
k=1;
while k < nFrames
u=signal(1*k,100*k,'data.wav'); % 100 length
subplot(2,2,1);
plot(u);
subplot(2,2,2);
plot(sin(u));
subplot(2,2,3);
plot(cos(u));
subplot(2,2,4);
plot(tan(u));
% not necessary but for heading of overal figure
fprintf('Press Enter for next slice\n');
str=sprintf('Slice %d', k);
mtit(hFig, str);
k=k+1;
keyboard
end
function u=signal(a,b,file)
[fs,smplrt]=audioread(file);
u=fs(a:b,1);
end
其中
k
增加1,但不会更新数据。有时(很少),数据一次是下一次迭代。 k
可能比nFrame更大,因此keyboard
只是不断要求更多投入。 我之前遇到过一个问题,即窗口关闭会导致应用程序崩溃。我在这里包括这个,因为我在一个答案的评论中提到了一个问题。
我现在避免了这个问题hFig=figure;
n=5;
k=1;
while k<nFrames
% for the case, the user closes the window but starts new iteration
if(not(ishandle(hFig)))
hFig=figure;
end
...
end
如果用户关闭了前一个图,则会创建一个新图。
我尝试将hFig=figure;
放在while循环的if子句中,但是没有成功,以避免在代码中重复。
如果您知道为什么在while循环的if子句中没有句柄hFig
,请告诉我。
如何在Matlab中使用更新的输出循环子图?
答案 0 :(得分:2)
要停止脚本等待用户的输入,您应该使用input而不是keyboard
。
实际上keyboard会使您的脚本进入debug
模式。它会停止脚本的executino(如breakpoint
),允许用户检查变量的值。
您可以按如下方式修改脚本(修改位于脚本的末尾,由“更新的部分”标识):
hFig=figure
nFrames=5;
k=1;
while k < nFrames
u=signal(1*k,100*k,'handel.wav'); % 100 length
subplot(2,2,1);
plot(u);
subplot(2,2,2);
plot(sin(u));
subplot(2,2,3);
plot(cos(u));
subplot(2,2,4);
plot(tan(u));
% not necessary but for heading of overal figure
%
% UPDATED SECTION
%
% Use the string "Press Enter for next slice\n" as the prompt for the
% call to "input"
%
% fprintf('Press Enter for next slice\n');
% str=sprintf('Slice %f', k);
% Use %d instead of "%f" to print integer data
str=sprintf('Slice %d', k);
mtit(hFig, str);
k=k+1;
% Use "input" instead of "keyboard"
% keyboard
input('Press Enter for next slice\n')
end
希望这有帮助。
Qapla'