Перезапись нежелательной функции tkinter - PullRequest
1 голос
/ 26 февраля 2020

так что в основном у меня есть функция с анимацией 1 объекта, и я хочу иметь возможность иметь больше независимых объектов, однако при повторном вызове функции она перезаписывает только старый, и я хочу иметь возможность иметь несколько объектов (я хочу дождь)

import  random
import tkinter
canvas = tkinter.Canvas(width=1000, height=600, bg="white")
canvas.pack()

x = 0
y = 0

def idk():
    idk2()
    canvas.after(2000,idk2)

def idk2():
    global x
    x = random.randint(0,1000)
    idk3()

def idk3():
    global y
    y = y+10
    canvas.delete('idk3')
    canvas.create_rectangle(x-2,y-10,x+2,y+10,tag="idk3")
    if y<600:
        canvas.after(50, idk3)

idk()

Ответы [ 2 ]

0 голосов
/ 26 февраля 2020

Если вам нужно много падающих дождей, вам нужно сохранить капли дождя до того, как они достигнут земли.

Ниже приведен пример:

raindrops = {}

def raining():
    # update existing rain drops
    for rd in list(raindrops):
        if raindrops[rd] < 600:
            # keep rain falling
            raindrops[rd] += 10
            canvas.move(rd, 0, 10)
        else:
            # rain drop reaches the ground, remove it
            canvas.delete(rd)
            del raindrops[rd]
    # create new rain drop at random x
    x = random.randint(0, 1000)
    rd = canvas.create_line(x, 0, x, 20)
    raindrops[rd] = 0  # save the y of rain drop
    canvas.after(20, raining)
0 голосов
/ 26 февраля 2020

Просто удалите эту строку из своего кода:

canvas.delete('idk3')

И, конечно, вызовите функцию idk () еще раз

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...