@FlakeSunrise

[Tkinter/Python] Как увеличить круг в Tkinter?

Приветствую. Столкнулся с проблемой, мне необходимо написать код на Python с помощью Tkinter'a, суть данного кода: Должно открыться окно, и должен появиться круг, который будет становиться с каждой секундой(двумя) больше, при этом окно не должно закрываться, пробовал множество вариантов , и через Time, Threading, но код просто зависает. Вообщем кратко, небходимо сделать цикл, который будет выполняться не сразу, а каждую секунду, и круг будет постепенно расти.
import tkinter as tk
root = tk.Tk()
canvas = tk.Canvas(root, width=2000, height=2000, borderwidth=0, highlightthickness=0, bg="black")
canvas.grid()

def _create_circle(self, x, y, r, **kwargs):
    return self.create_oval(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle = _create_circle
def _create_circle_arc(self, x, y, r, **kwargs):
    if "start" in kwargs and "end" in kwargs:
        kwargs["extent"] = kwargs["end"] - kwargs["start"]
        del kwargs["end"]
    return self.create_arc(x-r, y-r, x+r, y+r, **kwargs)
tk.Canvas.create_circle_arc = _create_circle_arc
for r in range(20, 200, 1):
	canvas.create_circle(950, 500, r, fill="blue", outline="", width=4)
root.wm_title("Circles and Arcs")
root.mainloop()
  • Вопрос задан
  • 207 просмотров
Пригласить эксперта
Ответы на вопрос 1
SuckMyPython
@SuckMyPython
matrix.polling(none_stop=True)
В данном примере задержка 100ms
import tkinter as tk

root = tk.Tk()
root.wm_title("Circles and Arcs")

ww = 1000
wh = 1000
sw = root.winfo_screenwidth()                   #Расположение окна по центру экрана
sh = root.winfo_screenheight()                  #
wx = (sw - ww)/2                                #
wy = (sh - wh)/2                                #
root.geometry('%dx%d+%d+%d' % (ww, wh, wx, wy)) #

canvas = tk.Canvas(root, width=ww, height=wh, borderwidth=0, highlightthickness=0, bg="black")      #Канвас
canvas.grid()

size_kef = 10       #Кэф изначального размера шарика
grow_kef = 5        #Кэф скорости роста
grow_delay = 100    #Задержка в милисекундах

x0 = ww/2-size_kef          #Установка изначального размера шарика
y0 = wh/2-size_kef          #
x1 = ww/2+size_kef          #
y1 = wh/2+size_kef          #

coordx = x0, y0, x1, y1     #

orb = canvas.create_oval(coordx, fill="blue", outline="", width=4)     #Шарик

def stop():                                     #Завершение роста по достижению границ окна
    print("stop")
    canvas.itemconfig(orb, fill="green")

def grow():
    global x0, y0, x1, y1
    print((x1-x0))
    
    x0 -= grow_kef              #Изменение размера шарика
    y0 -= grow_kef              #
    x1 += grow_kef              #
    y1 += grow_kef              #
    coordx = x0, y0, x1, y1     #
    canvas.coords(orb, coordx)  #

    if (x1-x0)<=ww or (y1-y0)<=wh:
        canvas.after(grow_delay, grow)          #Обращение функции к самой себе через задержку (.after())

    if (x1-x0)>=ww or (y1-y0)>=wh:              #Здесь ограничение на рост (граница - размеры окна)
        stop()

grow()      #Первичный вызов функции

root.mainloop()
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы