Tkinter:随机移动一千点

时间:2013-02-03 02:01:44

标签: python random tkinter move

这是我关于stackoverflow的第一篇文章,所以如果它不是很清楚,我很抱歉。所以,我需要帮助我的CompSci课程。

以下是说明:

在窗口中央初始化1000点。

  • 每次重复1000次......
    • 翻转四面硬币,然后向上或向下或向左或向左移动一个点 对。 - 我们的想法是为1000中的每一个独立完成 点。因此,一个点的运动不会影响任何其他点 运动。
    • 在每个点的当前绘制一个“点”或1 x 1矩形 位置。
    • 附上三张屏幕截图,显示早,中,晚 分布。

我已粘贴到目前为止所得到的内容:

此代码的问题是:它不会显示“移动”的点。我的导师希望它像动画一样。因为有1000点并且它们移动了一千次,所以不同“帧”之间的延迟必须非常短。

如果有人能帮我这样做,我会非常感激。

from Tkinter import Tk, Canvas
from random import randint


d=0
t=0
v=1000

x = []
y = []
for i in range(1000):
    x.append(300)
    y.append(300)





root=Tk()
canvas=Canvas(root, width=600, height=600, bg="white")#creates the canvas

for l in range(v):
    for k in range(t):
        for i in range(len(x)):
            x[i] += randint(-2,2)
            y[i] += randint(-2,2)



    for i in range(1000):
        canvas.create_rectangle(x[i],y[i],x[i],y[i])
    if l < 999:
        for i in range(1000):
            canvas.create_rectangle(x[i],y[i],x[i],y[i], outline='white')

    t+=1
    l+=1

canvas.pack()
root.mainloop()

1 个答案:

答案 0 :(得分:1)

问题似乎是canvas不知道如何为动画的每一步做什么。如果你将用于更新画布的代码放在一个函数中(称为redraw()),则在程序的主程序中调用该函数来绘制第一个图像,并包含类似{{1}的调用作为canvas.after(tim,redraw)函数的最后一行,它将确保画布每redraw()毫秒更新一次。

(编辑)

我还注意到tim从列表randint(-2,2)生成随机选择,而不是列表[-2,-1,0,1,2]中的随机选择,这是您希望的列表。此外,如果您正在尝试模拟四边模具,其中四边是:+ 2x,-2x,+ 2y,-2y;然后分别计算x和y方向上的随机运动不会这样做,因为它会在每个时间步的每个点产生x和y方向的运动。