我正在编写一个程序,在某个程序中绘制图形并在屏幕上显示。然后,用户需要按'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;我假设还有很多其他选择吗?
由于
答案 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