【问题标题】:using timer inside a loop在循环中使用计时器
【发布时间】:2012-10-14 18:34:12
【问题描述】:

我的 GUI 的目的是显示图像并获得用户的响应:按键(E 或 I)或无响应。在图像本身之间应该有 3 秒的暂停显示一些文本(我的代码中的a7 UIcontrol)。问题是我需要做 30 次,所以我使用了一个带有计时器的循环。但是 GUI 效果不佳..

它应该执行以下操作:

for 30 times do
    2 sec showing text (a7)
    then showing an image for 3 sec or until I\E are pressed
end

这是我的代码;我要添加两个版本,因为它们的主要区别在于 TIMER 功能和属性..

https://docs.google.com/document/d/1N6LSDAYo_DVrBCUbuPth4JPCvkI3pBNcnAZcV6Kl9wM/edit
更易读的版本:http://pastebin.com/vd3HNGv1

照片在这里(尽管您可以使用任何 2 张照片):https://picasaweb.google.com/alex.goltser/ScrapbookPhotos

一开始问题总是一个错误:

您尝试在计时器工作时启动它

但现在是别的东西了..

【问题讨论】:

    标签: matlab user-interface timer error-handling matlab-guide


    【解决方案1】:

    为什么要运行计时器功能?

    这是运行循环的另一种方式:

    for repeat = 1:30
    
        *show text*
        drawnow %# to make sure the graphics are updated
        pause(2) %# wait two seconds
    
        *show image*
        drawnow
        t = tic;
        done = false;
        while ~done && toc(t)<3 %# checks for keypress or until 3 secs
           *check for keypress*
           if E/I key has been pressed
              done = true;
           end
        end
    end %# repeat 30x
    

    【讨论】:

    • 我尝试使用您的想法 - 但它不起作用,首先 - 我的图形属性中有一个 KeyPressFcn,但我应该写什么而不是 - “如果按键”?因为我的按键功能没有输出,它只是 key_press(~,eventdata)..
    • @user1742463:我为造成的混乱道歉。 keypress 不是指 Matlab 函数,而是指whether a key has been pressed。如果我没记错的话,您可以在代码中使用 java.robot 类来执行此操作。
    • @user1742463:实际上,您可以在 check for keypress 行中检查是 get(figureHandle,'currentCharacter') is either E` 还是 I
    • 我在运行时收到此错误 - “未定义的函数或变量 'figureHandle'。”可能是什么问题呢?我主要使用 UIcontrols 而不是句柄。所以你知道要改变什么吗?
    • @user1742463: figureHandle 是所有 uicontrol 的父图形的句柄。在您的代码中是 fh
    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-29
    相关资源
    最近更新 更多