Tkinterでキャンバス座標をウィンドウ座標に変換する方法はありますか?
これは、ウィンドウからキャンバスの座標に変換するのとは逆になります。これは次のように行われます。
x = canvas.canvasx(event.x)
Tkinterでキャンバス座標をウィンドウ座標に変換する方法はありますか?
これは、ウィンドウからキャンバスの座標に変換するのとは逆になります。これは次のように行われます。
x = canvas.canvasx(event.x)
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 のキャンバス x/y はウィンドウ座標 0,0 に対応します)。
100 ピクセル下および右にスクロールした場合、キャンバス座標 100,100 は、ウィンドウ座標 0,0 に変換されます。これは、ウィンドウの左上隅にあるピクセルであるためです。
これにより、キャンバスの左上隅に相対的な値が得られます。ウィンドウ全体の左上隅を基準にしてこれが必要な場合は、 と を使用winfo_x
しwinfo_y
て、ウィンドウを基準にしたキャンバスの座標を取得し、もう少し計算を行います。または、 と を使用winfo_rootx
しwinfo_rooty
て、画面に対するウィジェットの座標を取得します。