如何将Tkinter画布坐标转换为窗口坐标?
有没有办法把画布上的坐标转换成窗口上的坐标呢?
这其实是窗口坐标转到画布坐标的反向操作,窗口坐标转画布坐标的方法是这样的:
x = canvas.canvasx(event.x)
1 个回答
11
使用 canvasx
和 canvasy
这两个方法,传入参数零,可以计算出可见画布的左上角的 x/y 坐标。然后,你只需要用数学运算把画布的坐标转换成相对于窗口的坐标。
# upper left corner of the visible region
x0 = self.canvas.canvasx(0)
y0 = self.canvas.canvasy(0)
# given a canvas coordinate cx/cy, convert it to window coordinates:
wx0 = cx-x0
wy0 = cy-y0
举个例子,如果画布完全滚动到最上面和最左边,那么 x0 和 y0 就都是零。你给出的任何画布坐标都会和窗口坐标相同(也就是说,画布的坐标 0,0 对应窗口的坐标 0,0)。
如果你向下和向右滚动了 100 像素,那么画布坐标 100,100 会转换成窗口坐标 0,0,因为那是窗口左上角的像素。
这样你就得到了相对于画布左上角的值。如果你需要的是相对于整个窗口左上角的值,可以使用 winfo_x
和 winfo_y
来获取画布相对于窗口的坐标,然后再做一些数学运算。或者,使用 winfo_rootx
和 winfo_rooty
来获取小部件相对于屏幕的坐标。