[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