Re: [Rd] using yscrollcommand in tkcanvas crashes R (PR#13231)

From: Paul Roebuck <plroebuck_at_mdanderson.org>
Date: Thu, 30 Oct 2008 14:59:17 -0500 (CDT)

On Thu, 30 Oct 2008 sundar.dorai-raj_at_pdf.com wrote:

> Full_Name: Sundar Dorai-Raj
> Version: 2.8.0
> OS: Windows
> Submission from: (NULL) (76.220.41.126)
>
>
> The following code crashes R:
>
> library(tcltk)
> tt <- tktoplevel()
> tc <- tkcanvas(tt, yscrollcommand = function(...) tkset(ts, ...))
>
> > sessionInfo()
> R version 2.8.0 (2008-10-20)
> i386-pc-mingw32
>
> locale:
> LC_COLLATE=English_United States.1252;LC_CTYPE=English_United
> States.1252;LC_MONETARY=English_United
> States.1252;LC_NUMERIC=C;LC_TIME=English_United States.1252
>
> attached base packages:
> [1] tcltk stats graphics grDevices utils datasets methods
> [8] base
>

Here's a portion of the code I wrote for a package that contains a scrollable canvas, if it helps you any.

.RDEnv <- new.env(hash=TRUE)                   # Private environment

rdenv <- function() {

    return(.RDEnv)
}

scrollframe_create <- function(parent) {

    stopifnot(is.tkwin(parent))

    frame <- tkframe(parent,

                     class="ScrollFrame")
    xscroll <- tkscrollbar(frame,
                           orient="horizontal",
                           command=function(...) tkxview(vport, ...))
    yscroll <- tkscrollbar(frame,
                           orient="vertical",
                           command=function(...) tkyview(vport, ...))
    vport <- tkcanvas(frame,
                      xscrollcommand=function(...) tkset(xscroll, ...),
                      yscrollcommand=function(...) tkset(yscroll, ...))

    pady <- paste("0", tclvalue(tkwinfo.reqheight(xscroll)))

    tkpack(yscroll, side="right", fill="y", pady=pady)
    tkpack(xscroll, side="bottom", fill="x")
    tkpack(vport, side="left", fill="both", expand=TRUE)

    int.frame <- tkframe(vport,
                         borderwidth=4,
                         relief="groove")
    tkcreate(vport, "window", "0 0", anchor="nw", window=int.frame$ID)     tkbind(int.frame, "<Configure>", function() scrollframe_resize(int.frame))

    ## Save this so items can be put in it     assign("interior.frame", int.frame, envir=rdenv())

    return(frame)
}

scrollframe_resize <- function(iframe) {

    stopifnot(tclvalue(tkwinfo.class(iframe)) == "Frame")

    w <- tkwinfo.width(iframe)
    h <- tkwinfo.height(iframe)

    vport <- tkwinfo.parent(iframe)
    stopifnot(tclvalue(tkwinfo.class(vport)) == "Canvas")     bbox <- tkbbox(vport, "all")

    tkconfigure(vport,

                width=w,
                height=h,
                scrollregion=bbox,
                xscrollincrement="0.1i",
                yscrollincrement="0.1i")
}

scrollframe_interior <- function() {

    return(get("interior.frame", envir=rdenv())) }



SIGSIG -- signature too long (core dumped)

R-devel_at_r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel Received on Thu 30 Oct 2008 - 20:12:58 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Fri 31 Oct 2008 - 07:30:30 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-devel. Please read the posting guide before posting to the list.

list of date sections of archive