rotate_string <- function(x, forwards) 
{ 
 nchx <- nchar(x) 
 if(forwards) 
 {                  
   paste(substr(x, nchx, nchx), substr(x, 1, nchx - 1), sep = "") 
 } else 
 {                              
   paste(substr(x, 2, nchx), substr(x, 1, 1), sep = "") 
 } 
}

handle_rotate_label <- function(obj, interval = 100)
{
 addHandlerIdle(obj,
 handler = function(h, ...)
 {
 svalue(obj) <- rotate_string(svalue(obj), tag(obj, "forwards"))
 },
 interval = interval
 )
}

handle_change_direction_on_click <- function(obj)
{
 addHandlerClicked(obj,
 handler = function(h, ...)
 {
 tag(h$obj, "forwards") <-!tag(h$obj, "forwards")
 }
 )
}

library(gWidgets)
library(gWidgetstcltk) 
lab <- glabel("Hello World! ", container = gwindow()) 
tag(lab, "forwards") <- TRUE 
handle_rotate_label(lab) 
handle_change_direction_on_click(lab)