[R-gui] gWidgets: several statusbars per window?

Liviu Andronic landronimirc at gmail.com
Sat Feb 27 20:00:20 CET 2010


On 2/27/10, j verzani <jverzani at gmail.com> wrote:
> Sorry, not without just using RGtk2 commands. At some time this was possible,
>  but I changed the behavior so statusbars, menusbars and toolbars are only part
>  of a toplevel window.
>
Any chance that this would be relaxed in future versions?


>  If you want to use RGtk2 commands, it isn't so hard. Here is an example:
>
I've been comparing RGtk2 and tcltk, and sofar I prefer tcltk
behaviour. The complaints are mainly petty, but they can impact
productivity (see the code at the end):
- tcltk resizes the window/containers dynamically, to fit any
additional elements; RGtk2 creates a window of fixed size (much bigger
than the containing widgets).
- for the sliders, when clicking on a slider's "empty space", RGtk2
will switch the sliders value to either min or max, while tcltk will
change it by a step of 1.
- for the sliders, tcltk doesn't react to the mouse scroll-wheel,
while RGtk2 does. However, RGtk2 will change the values using a step
of 2 (say, from 1 -> 3 -> 5; even though `by=1') instead of a
preferable step of 1 (from 1 -> 2 -> 3).

In any case, I've just tried gspinbutton() instead of gslider(), and I
get much of what I need. Also, using pure RGtk2 commands I have the
statusbars as I wanted, so I guess I'll stick with RGtk2.

Thanks for the suggestions
Liviu

##prepare the sliders
count.mv.int <- function(x, start=1, end=4){
    assign("i", x, envir = .GlobalEnv)
    print(paste("i = ", i))
    return(paste("i = ", i))
}
count.mv.int(2); i

count.mv.let <- function(x, start=1, end=7){
    assign("l", letters[x], envir = .GlobalEnv)
    print(paste("l = ", l))
    return(paste("l = ", l))
}
count.mv.let(3); l

##generate the GUI
count.pop4 <- function(fun=c("count.mv.int", "count.mv.let"),
kit=c("RGtk2", "tcltk"), sb=T){
    require(gWidgets)
    options(guiToolkit=kit[1])
    w <- gwindow(paste("Counters (lapply)"))
    g <- ggroup(cont=w, horizontal=T)
    x.fun <- function(k){
        x.cont <- paste("g", k, sep="")
        assign(x.cont, ggroup(cont=g, horizontal=FALSE))
        glabel(paste("'", fun[k], "'", sep=""), cont=get(x.cont))
        x.handl <- paste("h", k, sep="")
        assign(x.handl, function(h,...){
            x.mess <- eval(parse(text=paste(fun[k], "(svalue(h$obj))", sep="")))
            get(x.sb)$push(1, x.mess)
        })
        x.sl <- paste("s", k, sep="")
        assign(x.sl, gslider(from=formals(fun[k])$start,
to=formals(fun[k])$end,
                by=1, cont=get(x.cont), handler=get(x.handl)))
        gseparator(horizontal=FALSE, cont=g, expand=TRUE)
        if(sb){
            x.sb <- paste("s", k, sep="")
            assign(x.sb, gtkStatusbar())
            add(get(x.cont), get(x.sb))
            get(x.sb)$push(1, fun[k])
        }
    }
    lapply(1:length(fun) , x.fun)
}
##RGtk2 exp
count.pop4()
##tcltk exp
count.pop4(kit="tcltk", sb=F)

> sessionInfo()
R version 2.10.1 (2009-12-14)
x86_64-pc-linux-gnu

locale:
 [1] LC_CTYPE=en_GB.UTF-8       LC_NUMERIC=C
 [3] LC_TIME=en_GB.UTF-8        LC_COLLATE=en_GB.UTF-8
 [5] LC_MONETARY=C              LC_MESSAGES=en_GB.UTF-8
 [7] LC_PAPER=en_GB.UTF-8       LC_NAME=C
 [9] LC_ADDRESS=C               LC_TELEPHONE=C
[11] LC_MEASUREMENT=en_GB.UTF-8 LC_IDENTIFICATION=C

attached base packages:
[1] tcltk     stats     graphics  grDevices utils     datasets  methods
[8] base

other attached packages:
[1] gWidgetsRGtk2_0.0-59 gWidgetstcltk_0.0-30 gWidgets_0.0-39
[4] fortunes_1.3-7       RGtk2_2.12.18        cairoDevice_2.10
[7] sos_1.2-5            brew_1.0-3           hints_1.0.1-1

loaded via a namespace (and not attached):
[1] tools_2.10.1



More information about the R-SIG-GUI mailing list