2011-10-18 90 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:我的不好。我沒有完全理解你所問的問題而匆忙地回答。希望我現在給出了更好的答案。 –