1

我有一个 GUI,我想从按下给定键到释放键重复一些过程。

我知道当按键被按下时如何做一些处理。但是有什么方法可以例如每秒显示随机数,直到释放密钥?

谢谢您的回答。贾亚

4

1 回答 1

2

您可以在您的图形上附加一个计时器,使用 启动它KeyPressFcn并使用 停止它KeyReleaseFcn

下面的示例将创建一个图形,只要f按下该键,就会在控制台中显示一个随机数。

function h=keypressdemo

h.fig = figure ;

%// set up the timer
h.t = timer ;
h.t.Period = 1 ;
h.t.ExecutionMode = 'fixedRate' ;
h.t.TimerFcn = @timer_calback ;

%// set up the Key functions
set( h.fig , 'keyPressFcn'   , @keyPressFcn_calback ) ;
set( h.fig , 'keyReleaseFcn' , @keyReleaseFcn_calback ) ;

guidata( h.fig ,h)

function timer_calback(~,~)
    disp( rand(1) )

function keyPressFcn_calback(hobj,evt)
    if strcmp(evt.Key,'f')
        h = guidata(hobj) ;
        %// necessary to check if the timer is already running
        %// otherwise the automatic key repetition tries to start
        %// the timer multiple time, which produces an error
        if strcmp(h.t.Running,'off')
            start(h.t)
        end
    end

function keyReleaseFcn_calback(hobj,evt)
    if strcmp(evt.Key,'f')
        h = guidata(hobj) ;
        stop(h.t)
    end

这是一个简单的计时器模式,回调函数花费的时间比间隔时间少很多,所以在这里没有问题。如果您希望任何函数在完成后立即重新执行(一种无限循环),您可以通过更改executionmode计时器来设置它(阅读timer示例文档。
但是,请注意,如果您的回调永久执行并且消耗所有(matlab 唯一的)线程资源,您的 GUI 可能会变得反应迟钝。

于 2015-07-03T22:56:47.413 回答