#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: виноват. Я поспешно ответил, не до конца понимая, о чем вы спрашиваете. Надеюсь, теперь я дал лучший ответ.