Hello,

I have a tk2mclistbox displaying some data (a matrix).
It works OK while ncol(matrix) > 1; but when matrix is one-columned, only
the first row seems to be displayed.
what am I missing?

And talking about tk2mclistbox, is there a way to display rows with
different (alternate) background colors?

Thanks.
 Eduardo San Miguel


require(tcltk2)

fillt <- function() {
   nCols =   as.numeric(tkget(tl.e1))
   nRows =   as.numeric(tkget(tl.e2))

   # remove existing columns
   COLUMNS <- tclvalue(.Tcl( paste( tl.t, 'column names')))
   for (i in 1:length(COLUMNS)){
      .Tcl( paste( tl.t, 'column delete', COLUMNS[i]))
   }

   # generate matrix
   data = matrix(rnorm(nRows*nCols), nc = nCols)

   # tricky way to display one-column data
#   auxcol <- matrix(rep(0, dim(data)[1]), ncol = 1)
#   tk2column(tl.t, 'add', 'auxcol', label = 'auxcol',
#    width = 20)
#   tk2column(tl.t,'configure', 'auxcol', visible = 0)

   # insert data
   for (i in 1:dim(data)[2]){
      tk2column(tl.t, 'add', paste('col_',i, sep =''),
                     label = paste('col_',i, sep =''),  width = 20)
   }


   # tricky way to display one-column data
#   data = cbind(auxcol, data)
   tk2insert.multi(tl.t, 'end', data)

   tkconfigure(tl.t, columnborderwidth = 1)
   tkconfigure(tl.t, columnbd = 1)
}

tl <- tktoplevel()

tl.f1 <- tk2frame(tl)
tl.l1 <- tk2label(tl.f1, text = 'N Cols:')
tl.l2 <- tk2label(tl.f1, text = 'N Rows:')
tl.e1 <- tk2entry(tl.f1 ,'n Cols ', width = 5)
tl.e2 <- tk2entry(tl.f1 ,'n Rows ', width = 5)
tl.f1.b <- tk2button(tl.f1, ' ', text = 'Show Matrix',
     command = fillt)
tl.f1.b1 <- tk2button(tl.f1, ' ', text = 'Close',
     command = function() tkdestroy(tl))

tl.f2 <- tk2frame(tl)
tl.t <- tk2mclistbox(tl.f2, width = 84, resizablecolumns = TRUE)
tl.scr_1 <- tk2scrollbar(tl.f2, orient = 'vertical')
tl.scr_2 <- tk2scrollbar(tl.f2, orient = 'horizontal')

tkconfigure(tl.t, yscrollcommand = function(...) tkset(tl.scr_1, ...))
tkconfigure(tl.scr_1, command = function(...) tkyview(tl.t, ...))
tkconfigure(tl.t, xscrollcommand = function(...) tkset(tl.scr_2, ...))
tkconfigure(tl.scr_2, command = function(...) tkxview(tl.t, ...))

tkpack(tl.scr_2, side = 'bottom', fill = 'x')
tkpack(tl.scr_1, side = 'right', fill = 'y')
tkpack(tl.t, fill = 'both', expand = 1)

tkgrid(tl.f1)
tkgrid(tl.l1, row = 0, column = 0)
tkgrid(tl.e1, row = 0, column = 1)
tkgrid(tl.l2, row = 0, column = 2)
tkgrid(tl.e2, row = 0, column = 3)
tkgrid(tl.f1.b, row = 0, column = 4)
tkgrid(tl.f1.b1, row = 0, column = 5)
tkgrid(tl.f2)

tkconfigure(tl.t, relief = 'sunk')
tkbind(tl.t,'<Enter>',function() tkfocus(tl.t))

	[[alternative HTML version deleted]]

