【问题标题】:tkinter unwanted function overwritingtkinter 不需要的功能覆盖
【发布时间】:2020-02-25 21:15:38
【问题描述】:

所以基本上我有一个带有 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()

【问题讨论】:

标签: python function animation canvas tkinter


【解决方案1】:

如果您想要大量下雨,则需要在雨滴落到地面之前将其保存。

下面是一个例子:

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)

【讨论】:

  • 我会在这里和那里改变一些东西,但感谢主要功能!
【解决方案2】:

只需从您的代码中删除这一行:

canvas.delete('idk3')

当然还要再次调用 idk() 函数

【讨论】:

  • nonono 我的意思是我想制造一场“雨”,所以这对我一点帮助都没有,没有这个删除它只是一个更大的混乱
  • 我不明白。你想同时制作2个坠落元素吗?
  • 是的,确切地说,我想要很多下落元素,我只是不想有很多行代码,所以我想知道如何使用一个共享函数独立绘制更多元素
  • 这并不像你想象的那么容易。这是一个关于python下雪的教程:youtube.com/watch?v=Quof1cOsaOw
  • 谢谢,但它是通过 pygame 而不是 tkinter,我稍后会在我的动画中添加一些条件,当我可以获得更多元素时,但我看到他的方法与我的完全不同,所以我我不会尝试在 tkinter 中重写他的 pygame 方法(因为我想留在 tkinter),那只会导致更多的并发症
猜你喜欢
  • 2017-01-03
  • 2016-10-20
  • 1970-01-01
  • 2016-09-28
  • 2016-09-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多