[R] tcltk: repeat event while button is down?

Peter Dalgaard p.dalgaard at biostat.ku.dk
Thu Aug 5 22:55:10 CEST 2004


Duncan Murdoch <murdoch at stats.uwo.ca> writes:

> Is there a way in TCL/TK to trigger an event multiple times while a
> button is held down?  I'd like to have an rgl scene continuously
> rotate until the button is released.

Something involving "after", I'd say. Set up the rotate action to
reschedule itself after N milliseconds, and the button release event
to "after cancel". 


Or, perhaps safer, set a flag and condition the "after" command on it.

I.e. something like

doit <- function() if(flag){rotate(); tkcmd("after",5,doit)}

on button press, 

flag <- TRUE ; doit()

and on button release

flag <- FALSE
       
That method has the drawback that one rotate() will occur after the
button release. 

The first suggestion would amount to

doit <- function() {rotate(); ID <<- tkcmd("after",5,doit)}

and then on button press (watch the scoping issues)

ID <- ""
doit()

and on release

tkcmd("after","cancel",ID)

which I think does work in pure Tcl, but I suspect that it in the
Windows implementation of R-Tcl can cause race conditions so that the
ID variable is outdated when the cancel takes place (Tcl guarantees
that scripts execute atomically; as it turns out, for good
reasons...). 

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907




More information about the R-help mailing list