On Sun, 30 Mar 2008 15:37:35 +0200
Fredrik Lundh <[EMAIL PROTECTED]> wrote:
> Ron Provost wrote:
>
> > Is there any way in tkinter to convert between coordinate systems?
> > Specifically, I'm refering to the canvas. I'm getting x and y's back in
> > mouse events and I would like to convert them back to inches 'i',
> > centemeters 'c', millimeters 'm' or points 'p'.
>
> use winfo_screenheight() and winfo_screenmmheight() to determine the
> pixel size, and use that to calculate "real-life" values. e.g.
>
> pixel_size = w.winfo_screenmmheight() / w.winfo_screenheight()
>
> ...
>
> x = x * pixel_size
> print x, "mm"
> print x/10.0, "cm"
> print x/25.4, "inches"
> print 72*x/25.4, "points"
>
You should be aware however that the values reported by winfo_screenmmheight()
and winfo_screenmmwidth() may be incorrect; I think this is because tk assumes
a screen dpi value of 72 which may be different from what the system actually
uses. For example my debian etch system uses a dpi value of 96 by default, so
when I call
w.winfo_screenmmheight()
tk returns 203 where the actual value should be 203 * (96 / 72) = 270 .
You can query the dpi value in use with
w.winfo_fpixels('1i')
which returns on my box: 95.976383763837632
You can even force tk to use a dpi value different from the system default:
w.tk.call('tk', 'scaling', '-displayof', '.', your_dpi_value / 72.0)
which may be useful if you want to make sure that for example some Canvas items
are drawn in an exact mm-size onto the user's screen (however be careful, doing
so might mess up the application's visual appearance on some systems, especially
using point-sized fonts should be avoided).
Hope this helps
Michael
_______________________________________________
Tkinter-discuss mailing list
[email protected]
http://mail.python.org/mailman/listinfo/tkinter-discuss