Обновление координат отрезка на canvas

Моя цель - постоянно обновлять конечную точку отрезка canvas. Первая точка всегда x = 960, y = 1080. Вторая точка постоянно меняется.

Я уже написал некоторый код, но он не обновляет отрезок.

def TargetLineESP():
    if True:
        x, y, z = SDK()
        pos1, pos2 = W2S(GetVM(), x, y, z, 1920, 1080)
        root = Tk()
        root.title('ESP')

        root.overrideredirect(False)
        screen_width = root.winfo_screenwidth()
        screen_height = root.winfo_screenheight()
        root.geometry("{0}x{1}+0+0".format(screen_width, screen_height))
        root.wm_attributes("-topmost", True)
        root.wm_attributes("-transparentcolor", "gray")
        canvas = Canvas(root, bg='gray', width=1920, height=1080)
        canvas.pack()

        canvas.create_line(960, 1080, pos1, pos2, fill='purple', width=5)
        canvas.coords(960, 1080, pos1, pos2)
        root.mainloop()

    TargetLineESP()

Я пытался использовать canvas.update(), canvas.coords(). Мне ничего не помогло. Нужна ваша помощь.


Ответы (1 шт):

Автор решения: insolor

Периодические действия в tkinter можно делать с помощью метода after:

from tkinter import *

root = Tk()

root.overrideredirect(False)
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.geometry("{0}x{1}+0+0".format(screen_width, screen_height))
root.wm_attributes("-topmost", True)
# root.wm_attributes("-transparentcolor", "gray")

canvas = Canvas(root, bg='gray', width=1920, height=1080)
canvas.pack()


line = canvas.create_line(960, 1080, 0, 0, fill='purple', width=5)


def redraw_line(pos1, pos2):
    canvas.coords(line, (960, 1080, pos1, pos2))
    pos1 += 20
    pos2 += 10
    # Запланировать выполнение функции redraw_line через 100 мс с указанными параметрами
    root.after(100, redraw_line, pos1, pos2)


redraw_line(0,0)

root.mainloop()
→ Ссылка