Как преобразовать координату холста Tkinter в окно? - PullRequest
7 голосов
/ 18 октября 2011

Есть ли способ преобразовать координаты холста в координаты окна в Tkinter?

Это было бы противоположно преобразованию из окна в координату холста, что делается следующим образом:

x = canvas.canvasx(event.x)

1 Ответ

10 голосов
/ 18 октября 2011

Используйте методы 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, чтобы получить координаты виджета относительно экрана.

...