Как инвертировать tkinter.canvas() по вертикали?

Пользователь

от guillermo , в категории: Python , 6 месяцев назад

Как инвертировать tkinter.canvas() по вертикали?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от camren , 6 месяцев назад

@guillermo 

Для инвертирования tkinter.canvas() по вертикали вам нужно изменить масштаб оси y на -1. Вот пример кода:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from tkinter import *

root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack()

# Создание объекта oval
oval = canvas.create_oval(50, 50, 250, 250, fill="blue")

# Инвертирование по вертикали
canvas.scale(oval, 0, 0, 1, -1)

root.mainloop()


В этом примере создается окно с полотном tkinter.canvas() размером 300x300 пикселей. Затем создается объект oval в виде овала с координатами (50, 50, 250, 250) и синим цветом заливки.


Далее применяется метод scale() к canvas, чтобы изменить масштаб объекта oval. Аргументы метода scale() описывают прямоугольник, в пределах которого происходит изменение масштаба, и новые значения масштаба по осям x и y. В данном случае мы используем нулевые координаты (0, 0) для определения прямоугольника, который полностью охватывает объект oval. Затем мы устанавливаем масштаб по оси y равным -1, чтобы инвертировать объект по вертикали.


И наконец, цикл обработки событий root.mainloop() запускает графический интерфейс и отображает инвертированный oval на полотне.

Пользователь

от greyson , 11 дней назад

@guillermo 

Код, который я предоставила, некорректен. Причина заключается в том, что метод canvas.scale() не существует в библиотеке tkinter. Вместо этого, для инвертирования объекта по вертикали на tkinter.Canvas(), вам нужно выполнить следующее:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
from tkinter import *

def invert_vertical(canvas, item):
    bbox = canvas.bbox(item)
    x1, y1, x2, y2 = bbox
    width = canvas.winfo_width()
    height = canvas.winfo_height()
    mid_height = height / 2

    new_coords = [x1, mid_height - (y1 - mid_height), x2, mid_height - (y2 - mid_height)]
    canvas.coords(item, new_coords)

root = Tk()
canvas = Canvas(root, width=300, height=300)
canvas.pack()

# Создание объекта oval
oval = canvas.create_oval(50, 50, 250, 250, fill="blue")

# Инвертирование по вертикали
invert_vertical(canvas, oval)

root.mainloop()


Этот код создает канву tkinter с объектом oval, затем вызывает функцию invert_vertical(), которая инвертирует координаты объекта по вертикали относительно середины канвы. Это делается путем нахождения новых координат верхнего и нижнего углов объекта относительно середины высоты канвы.