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

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

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

x = canvas.canvasx(event.x)

person Marcos Saito    schedule 18.10.2011    source источник


Ответы (1)


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

person Bryan Oakley    schedule 18.10.2011
comment
Я не знаю, то ли я не понял ответа, то ли я не ясно выразился. Мне нужен способ узнать координаты чего-то внутри холста (например, элемента изображения холста), но в виде координат окна, потому что мой холст можно прокручивать. - person Marcos Saito; 18.10.2011
comment
@Маркос: мой плохой. Я ответил поспешно, не до конца понимая, о чем вы спрашиваете. Надеюсь, теперь я дал лучший ответ. - person Bryan Oakley; 19.10.2011