[Rd] tk non-widget commands (esp. update and winfo)

Thomas Vogels Thomas Vogels <tov@ece.cmu.edu>
03 Feb 2001 14:27:47 -0500


I've been playing with the tcltk package.  It's very nice to have
access to buttons, menus etc. now.  Thank you!

Alas, I also have questions: In Tcl everything is a string [*].  This
is not the case in R, of course.  So why are return values of tk
commands still strings?  (Is there any other reason than speed or
"package is work in progress"?)


   > tt <- tktoplevel ()
   > tkwinfo ("width", tt)
  [1] "200"

Could (Should?) be:

   > tt <- tktoplevel ()
   > tkwinfo ("width", tt)
  [1] 200

   > tkwidth <- function (widget) as.numeric (tkcmd ("winfo", "width", widget))

Maybe a better example is the use of logical results:

  > if (tkwinfo ("exists", tt)) cat ("exists\n")
  Error in if (tkwinfo("exists", tt)) cat("exists\n") : 
          argument of if(*) is not interpretable as logical

Huh? Here you might have expected:

  > if (tkexists (tt)) cat ("exists\n")

  > tkexists <- function (widget) (tkcmd ("winfo", "exists", widget) == "1")

One problem is that the number of functions just explodes, so it might
be better to wrap them into one enchillada?

  >  tkwinfo <- function (widget, what="exists", ...) 
     switch (what,
             exists=tkcmd("winfo", "exists", widget)=="1",
             ismapped=tkcmd("winfo", "ismapped", widget)=="1",
             width=as.numeric (tkcmd("winfo", "width", widget)),
             height=as.numeric (tkcmd("winfo", "height", widget)),
             tkcmd ("winfo", what, widget, ...))

(The other problem is that tkcmd("winfo",...) may fail.)

Oh, while I'm at it:  There is no tkupdate:
  >  tkupdate <- function (idletasks=FALSE)
     if (idletasks) tkcmd ("update", "idletasks") else tkcmd ("update")

(which is essential to making sure that a window is mapped before its
width or height is queried.)  That's trivial if you have hacked Tcl/Tk
before -- so who is the package tlctk aimed at?


[*] Nowadays, they have glorified strings into objects.  Anywho...

mailto:tov@ece.cmu.edu (Tom Vogels)   Tel: (412) 268-6638   FAX: -3204

r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch