如何将Tkinter画布坐标转换为窗口坐标?

8
有没有办法在Tkinter中将画布坐标转换为窗口坐标?
这相当于从窗口坐标转换到画布坐标的反向转换,可以按照以下方式完成:
x = canvas.canvasx(event.x)
1个回答

11

使用canvasxcanvasy方法,给定零参数来计算可见画布左上角的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将为零。您提供的任何画布坐标将与窗口坐标相同(即:画布的x/y坐标为0,0将对应于窗口坐标0,0)。
如果你向下和向右滚动了100个像素,一个画布坐标为100,100将转换为窗口坐标0,0,因为那是窗口左上角的像素。
这给出了相对于画布左上角的值。如果您需要相对于整个窗口左上角的值,请使用winfo_xwinfo_y获取画布相对于窗口的坐标并进行更多计算。或者,使用winfo_rootxwinfo_rooty获取小部件相对于屏幕的坐标。

我不确定是我没理解答案还是我没说清楚。我想知道画布内某个物体(例如,画布图片元素)的坐标,但是以窗口坐标的形式呈现,因为我的画布可滚动。 - Marcos Saito
@Marcos: 我不好意思,之前回答时有些草率,没有完全理解你的问题。希望现在我给出了更好的答案。 - Bryan Oakley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接