MATLAB:暂停程序并等待按键

时间:2012-02-16 11:50:39

标签: matlab keypress

我正在编写一个程序,在某个程序中绘制图形并在屏幕上显示。然后,用户需要按'y'或'n'接受或拒绝图表。我目前的解决方案使用PsychToolbox(实际解决方案不需要),其中包括一个名为'KbCheck'的命令,该命令在调用所有键盘按钮的状态时进行检查。我的代码如下所示:

function [keyPressed] = waitForYesNoKeypress
keyPressed = 0; % set this to zero until we receive a sensible keypress
while keyPressed == 0 % hang the system until a response is given
    [ keyIsDown, seconds, keyCode ] = KbCheck; % check for keypress
    if find(keyCode) == 89 | find(keyCode) == 78 % 89 = 'y', 78 = 'n'
        keyPressed = find(keyCode);
    end
end

问题是,在按下某个键之前,系统确实“挂起”了。理想情况下,我可以滚动,缩放,并且通常与屏幕上绘制的图形进行交互,这样我就可以真正决定是否要按'y'或'n'!

我试过添加'drawow;'进入上面的while循环,但这不起作用:我仍然无法与绘制的图形交互,直到之后我接受或拒绝它们。

解决方案不必使用PsychToolbox;我假设还有很多其他选择吗?

由于

6 个答案:

答案 0 :(得分:6)

我使用input函数:

a = input('Accept this graph (y/n)? ','s')

if strcmpi(a,'y')
    ...
else
    ...
end

虽然不可否认它需要两个按键(y然后是Enter)而不是一个按键。

答案 1 :(得分:5)

为什么不使用waitforbuttonpress

文档:http://www.mathworks.fr/help/techdoc/ref/waitforbuttonpress.html

答案 2 :(得分:5)

等待按钮打开一个数字,这可能是不需要的。改为使用

pause('on');
pause;

让用户暂停直到按下某个键。

答案 3 :(得分:4)

你不想使用waitforbuttonpress因为它锁定了数字gui(没有缩放,平移等)。

pause会导致命令窗口从图中窃取焦点。

我发现最好的解决方案是使用null keyPressFcn打开图形以避免焦点问题:

figure('KeyPressFcn',@(obj,evt) 0);

然后等待CurrentCharacter属性更改:

waitfor(gcf,'CurrentCharacter');
curChar=uint8(get(gcf,'CurrentCharacter'));

答案 4 :(得分:1)

等待按键或鼠标按键点击:

示例:

w = waitforbuttonpress;
if w == 0
    disp('Button click')
else
    disp('Key press')
end

了解更多信息,请访问: http://www.mathworks.com/help/matlab/ref/waitforbuttonpress.html

答案 5 :(得分:-1)

waitforbuttonpress命令很好,但是通过鼠标单击或按键触发。如果您只想通过按键触发它,可以使用以下hack:

while ~waitforbuttonpress
end