[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