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

#python #tkinter #coordinate-systems #tkinter-canvas

#python #tkinter #системы координат #tkinter-canvas

Вопрос:

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

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

 x = canvas.canvasx(event.x)
  

Ответ №1:

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

Комментарии:

1. Я не знаю, не понял ли я ответ или я не ясно выразился. Мне нужен способ узнать координаты чего-либо внутри холста (например, элемента изображения холста), но в виде координат окна, потому что мой холст прокручивается.

2. @Marcos: виноват. Я поспешно ответил, не до конца понимая, о чем вы спрашиваете. Надеюсь, теперь я дал лучший ответ.