Используйте методы 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 будут равны нулю.Любая указанная вами координата холста будет соответствовать координате окна (т. Е. Холст x / y, равный 0,0, будет соответствовать координате окна 0,0).
Если вы прокрутили 100 пикселей вниз и вправо, координата холста 100,100 преобразуется в координату окна 0,0, поскольку это пиксель, который находится в верхнем левом углу окна.
Это дает вам значение относительно левого верхнего угла холста.Если вам нужно это относительно верхнего левого угла всего окна, используйте winfo_x
и winfo_y
, чтобы получить координату холста относительно окна и сделать немного больше математики.Или используйте winfo_rootx
и winfo_rooty
, чтобы получить координаты виджета относительно экрана.