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 Tkinter-discuss@python.org http://mail.python.org/mailman/listinfo/tkinter-discuss