Python Tkinter将画布坐标转换为窗口坐标

Mar*_*ito 7 python tkinter coordinate-systems tkinter-canvas

有没有办法将画布坐标转换为Tkinter中的窗口坐标?

这与从窗口到画布坐标转换相反,如下所示:

x = canvas.canvasx(event.x)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Bry*_*ley 10

使用canvasxcanvasy方法,给出零参数,以计算可见画布左上角的x/y.然后使用math将画布坐标转换为相对于窗口的某些内容.

# 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
Run Code Online (Sandbox Code Playgroud)

例如,如果画布一直滚动到顶部和左侧,则x0和y0将为零.您给出的任何画布坐标都与窗口坐标相同(即:0,0的画布x/y将对应于窗口坐标0,0).

如果您向下和向右滚动100个像素,则画布坐标100,100将转换为0,0的窗口坐标,因为这是窗口左上角的像素.

这将为您提供相对于画布左上角的值.如果您需要相对于整个窗口的左上角,请使用winfo_xwinfo_y获取画布相对于窗口的坐标,并进行更多的数学运算.或者,使用winfo_rootxwinfo_rooty获取窗口小部件相对于屏幕的坐标.