I am trying to create a simple window that displays a dataframe.  I was able
to put together a function from a couple of examples on the web.  For the
most part my function works.  The only problem is with resizing the window. 
I found a post where someone suggested using
with(env,tkpack("configure",etc.  ) but using tkpack messes around with the
layout obtained from tkgrid().  Any tips would be appreciated.

toTclArray<-function(dsn,dig=2) {

# Converts Data Frame/Matrix to a Tcl Array for Use in Displaying Tables
# dsn is the data set name
# dig is the number of digits to round to

        require(tcltk)
        tclarray1<-tclArray()

        for (i in 0:(dim(dsn)[1])) {
                for (j in 0:(dim(dsn)[2]-1)) {
                        # First Row is Set to Column Names to be Used as Labels
                        if (i==0) {
                                tclarray1[[i,j]]<-colnames(dsn)[j+1] 
                        } else {
                                tem<-dsn[i,j+1]
                                tclarray1[[i,j]]<-ifelse(is.na(tem),".",
                                        
ifelse(is.numeric(tem),round(tem,digits=dig),
                                        as.character(tem)))
                        }
                }
        }
        return (tclarray1)
}



displayInTable<-function(dsn,title="",height=-1,width=-1,dig=2,colwd=14)
{
        tclarray<-toTclArray(dsn,dig=dig)
        require(tcltk)
        tt<-tktoplevel()
        tclRequire("Tktable")
        tkwm.title(tt,title)
        table1<-tkwidget(tt,"table",rows=(dim(dsn)[1]+1),cols=dim(dsn)[2],
                                titlerows=1,titlecols=0,colwidth=colwd,
                                height=height+1,width=width+1,
                                xscrollcommand=function(...) tkset(xscr,...),
                                yscrollcommand=function(...) tkset(yscr,...) )

        xscr<-tkscrollbar(tt,orient="horizontal",command=function(...)
tkxview(table1,...) )
        yscr<-tkscrollbar(tt,command=function(...) tkxview(table1,...) )
        
        tkgrid(table1,yscr)
        tkgrid.configure(yscr,sticky="nsw")
        tkgrid(xscr,sticky="new")
        tkconfigure(table1,variable=tclarray,background="white",
                selectmode="extended",state="disabled")
        with(tt,{tkpack("configure",table1,expand=TRUE,fill="both")
                tkpack("configure",yscr,expand=TRUE,fill="y")
                tkpack("configure",xscr,expand=TRUE,fill="x")
        })
        return(table1)
}

# Example
try<-data.frame(matrix(1:100,5,20,byrow=TRUE))
colnames(try)<-1:20
displayInTable(try,title="1 to 100")
-- 
View this message in context: 
http://n4.nabble.com/Tck-tk-help-tp1837711p1837711.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to