如何在Matlab中稳定地等待Enter / Spacebar / ...?

时间:2016-10-02 10:51:48

标签: matlab matlab-figure

我想找到一些稳定的方法,可以在循环结束时按 Enter / Spacebar / ... 我不能让选项(1-2)稳定地工作。 我不需要任何GUI来完成任务。 只需按下键即可在Matlab提示中输出文本。 我尝试过这些选项但没有成功,但它们导致我的代码停滞不前,以至于没有密钥不起作用

while 1 % just indicating here a loop, not in actual code 

% Plotting here 6 Figures, and iterating/updating them in the loop 

% Option 1
% apparent docs: https://se.mathworks.com/matlabcentral/fileexchange/7465-getkey
while getkey ~= 13,
    disp('Enter was not pressed. Try again.'); 
end
disp('Enter was pressed.'); 

% Option 2
% Docs: https://se.mathworks.com/help/matlab/ref/waitforbuttonpress.html
w = waitforbuttonpress;
if w == 0
    disp('Button click')
else
    disp('Key press')
end

end

Matlab:2016a
操作系统:Debian 8.5 64位
硬件:华硕Zenbook UX303UA

3 个答案:

答案 0 :(得分:2)

以下代码将等到 空格键 被按下。

f = figure;
% The next line is just to hide the fig window away from the screen (not really necessary)
set(f, 'Position', [1e-12 1e-12 1e-12 1e-12]) 

k=0;
while ~k
    k=waitforbuttonpress;
    if ~strcmp(get(gcf,'currentcharacter'),' ');
        k=0;
    end
end
close(f)   %Closing the figure

答案 1 :(得分:1)

在循环结束时添加pause

答案 2 :(得分:-3)

我对Sardar_Usama answer的修订版。 从接受的答案编辑:窗口的最小布局,中心位置,最小窗口大小,而不是隐藏,因为在等待执行时需要做其他事情。 waitforbuttonpress的暂停在我的动态环境中也是不够的; pause有效,但不明白为什么

pause(1); % not sure; but this helps in many dynamic cases
% waitforbuttonpress pause is not sufficient

% https://stackoverflow.com/a/39816935/54964
f = figure('Name', 'Press SPACEBAR to continue', 'NumberTitle', 'off', ...
    'ToolBar', 'none', 'MenuBar', 'none', 'Units','centimeters', 'Position',[0 0 10 1]); 
movegui(f,'center');
k=0;
while ~k
    k=waitforbuttonpress; % includes pause in itself so no pause() need
    if ~strcmp(get(gcf,'currentcharacter'),' ');
        k=0;
    end
end
close(f)