[Rd] Getting width of Tk text widget via tcltk

Peter Dalgaard p.dalgaard at biostat.ku.dk
Mon Feb 28 20:57:33 CET 2005


"John Fox" <jfox at mcmaster.ca> writes:

> Dear Peter,
> 
> As you can see from the expression, I didn't use integer division, nor did I
> round() or floor(). Here's my original example, using a monospaced font:
> 
> > library(tcltk)
> > top <- tktoplevel()
> > textWindow <- tktext(top, bg="white", height=20, width=80, wrap="none",
> +     font=tkfont.create(family="courier", size=10))
> > tkgrid(textWindow, sticky="news")
> <Tcl>  
> > tkgrid.rowconfigure(top, 0, weight=1)
> <Tcl>  
> > tkgrid.columnconfigure(top, 0, weight=1)
> <Tcl>  
> > tkcget(textWindow, width=NULL)
> <Tcl> 80 
> > tkwinfo("width", textWindow$ID)
> <Tcl> 646 
> > 
> > (as.numeric(tkwinfo("width", textWindow$ID))
> +      - 2*as.numeric(tkcget(textWindow, borderwidth=NULL)) - 4) /
> +      as.numeric(tkfont.measure(tkcget(textWindow, font=NULL), "0"))
> [1] 79.75
> > 
> > (as.numeric(tkwinfo("width", textWindow$ID))
> +      - 2*as.numeric(tkcget(textWindow, borderwidth=NULL)) - 2) /
> +      as.numeric(tkfont.measure(tkcget(textWindow, font=NULL), "0"))
> [1] 80
> 
> I believe that the right answer is 80, and this appears correct visually,
> confirmed by typing in the window.

Interesting...

> tkwinfo("width", textWindow)
<Tcl> 488 
> (as.numeric(tkwinfo("width", textWindow))
+      - 2*as.numeric(tkcget(textWindow, borderwidth=NULL)) - 4) /
+   as.numeric(tkfont.measure(tkcget(textWindow, font=NULL), "0"))
[1] 80
> (as.numeric(tkwinfo("width", textWindow))
+       - 2*as.numeric(tkcget(textWindow, borderwidth=NULL)) - 2) /
+       as.numeric(tkfont.measure(tkcget(textWindow, font=NULL), "0"))
[1] 80.33333

Notice, btw, that textWindow$ID  shouldnn't be necessary.

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard at biostat.ku.dk)             FAX: (+45) 35327907



More information about the R-devel mailing list