From p.dalgaard at biostat.ku.dk  Mon Feb 28 16:39:26 2005
From: p.dalgaard at biostat.ku.dk (Peter Dalgaard)
Date: Mon Feb 28 16:45:19 2005
Subject: [Rd] Getting width of Tk text widget via tcltk
In-Reply-To: <Pine.LNX.4.61.0502281415380.24599@gannet.stats>
References: <20050228140503.YGVI1919.tomts22-srv.bellnexxia.net@JohnDesktop8300>
	<Pine.LNX.4.61.0502281415380.24599@gannet.stats>
Message-ID: <x2oee4hexd.fsf@biostat.ku.dk>

Prof Brian Ripley <ripley@stats.ox.ac.uk> writes:


> > <Tcl> 743
> >
> > I could convert pixels to characters, but wonder whether I can get the
> > latter directly.
> 
> I suspect you may have some difficulty with the latter, even in a
> monospace font.  Notice that 486 is not a multiple of 80, and if that
> is actually 81, 743 is not a multiple of 6.
> 
> I was trying to do this with heights for a listbox a few days ago, and
> it seems that the line spacing is actually 1 pixel greater than is
> reported. Since you can resize to a non-integer number of lines I
> don't believe (and I tried to read the source code) that Tcl/Tk works
> internally with characters.

I think that's actually an issue that involves the window manager too.
I don't think all WMs know how to deal in integer number of
characters. 

Anyways, the following piece of Tcl seems to do the trick:

% expr ([winfo width .a] - 2 * [.a cget -borderwidth] - 4)/[font measure [.a cget -font] 0]
27

Converting to R is left as an exercise...

If I got it right then the point is that at either side of the window
you have by 1 pixel, n border pixels, and 1 spacer pixel before the
first character.

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


[Rd] Getting width of Tk text widget via tcltk
Peter Dalgaard