1

在我的 Matlab 脚本中,我希望用户有 5 秒钟的时间通过单击任何鼠标按钮来回答问题,或者没有鼠标单击来回答问题。如果用户单击鼠标按钮,脚本将继续。如果 5 秒后没有单击鼠标,脚本也会继续。任何想法如何做到这一点?

[x,y,MouseClick]=ginput(1);我在一个tic toc循环中尝试过,并记录MouseClick变量,但脚本会暂停,ginput直到输入一些东西,它会永远在那里等待。如果没有输入,我需要它在 5 秒后继续前进。

这是代码:

for i=2:26

    % display current letter
    CurrentLetter=Data{i}{RowSelect};
    letter = text (0.3, 0.5, CurrentLetter, 'fontsize', 400, 'color', 'r');
    pause(0.5);
    delete (letter); % blank screen

    % allow 5 seconds to collect mouse click
    tic;
    MouseClick=0;
    while (toc<=5);
        pause(0.1);
        [x,y,MouseClick]=ginput(1);
        if MouseClick~=0 
            break; % stop loop if a mouse click has been pressed
        end
    end
 % add up the scores and write them to an xls file
 end
4

2 回答 2

0

您可以使用 uiwait 和 resume:我只是假设您有一个带有各种回调的按钮。

因此,您在 GUI 中构建按钮和其他所有内容,然后调用uiwait(gcf, 5)

在按钮回调中,您可以执行任何操作,可能会在某处记录答案,最后您调用uiresume(src.parent)

于 2016-07-13T07:10:52.940 回答
0

您可以调用waitforbuttonpress以等待输入 - 鼠标单击或按键。您还可以预先注册一个计时器,它可以模拟 5 秒延迟的按键事件。通过返回的值,waitforbuttonpress您可以判断用户是否单击了鼠标按钮,或者是否是按键事件(由用户手动触发,或由计时器自动触发)。

figure();
t = timer('TimerFcn', 'java.awt.Robot().keyPress(java.awt.event.KeyEvent.VK_SPACE);', 'StartDelay', 5);
start(t);
k = waitforbuttonpress();
if k == 0
    display('user made a mouse button click!');
else
    display('5 seconds elapsed, or user pressed a button!');
end
display('doing something...');
于 2016-07-12T21:29:02.740 回答