2011-10-18 92 views

回答

6

使用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将为零。您给出的任何画布坐标都将与窗口坐标相同(即:画布0,0的x/y将对应于窗口坐标0,0)。

如果向下向右滚动100个像素,则100,100的画布坐标将转换为0,0的窗口坐标,因为那是位于窗口左上角的像素。

这给你一个相对于画布左上角的值。如果您需要此相对于整个窗口的左上角,请使用winfo_xwinfo_y来获取画布相对于窗口的坐标并进行更多的数学计算。或者,使用winfo_rootxwinfo_rooty来获取小部件相对于屏幕的坐标。

+0

我不知道我是否不明白答案,或者如果我没有说清楚。我想要一种方法来了解画布内部的坐标(例如,画布图像项),但是以窗口坐标的形式,因为我的画布是可滚动的。 –

+0

@Marcos:我的不好。我没有完全理解你所问的问题而匆忙地回答。希望我现在给出了更好的答案。 –