我正在python 2.7中运行生物模拟器,并使用tkinter作为可视化工具。地图由方块组成,其中颜色代表土地类型,红色方块代表生物。我使用canvas.move将棋盘上的红色方块移开。它必须移动很多。但我确切知道它应该从哪里开始以及应该在哪里结束。我已经一点一点地运行了模拟,并且当它被调整为可能的两个动作时,即。模拟并不真正运行我只是测试它。我可以看到动作。但是当我真的运行这个模拟器时,所有的东西都会嗡嗡作响,而我所能看到的画布就是地图,但没有生物,也没有生物的移动。所以我的问题是这样的。首先,我怎么可能放慢这个过程,以便我可以看到这些动作?或者为什么模拟运行并现在显示任何tkinter?Tkinter进程在运行时未显示
模拟量非常大,很难挑出重要的位,所以下面的代码更加简化。但它匹配我做了tkinter的东西。我的SIM只是增加了更多的计算和循环。值得注意的是,这个例子完美无缺。
Driver.py:
from Tkinter import *
import animation
class Alien(object):
def __init__(self):
#Set up canvas
self.root = Tk()
self.canvas = Canvas(self.root, width=400, height=400)
self.canvas.pack()
#Vars
self.map = [[1, 0, 0, 1, 0], [0, 1, 0, 1, 0], [0, 0, 1, 0, 0], [0, 1, 1, 0, 0], [1, 0, 0, 1, 0]]
self.x = 0
self.y = 0
r = 50
self.land = {}
#Draw Init
for i, row in enumerate(self.map):
for j, cell in enumerate(row):
color = "black" if cell else "green"
self.canvas.create_rectangle(r * i, r * j, r * (i + 1), r * (j + 1),
outline=color, fill=color)
self.land[(i, j)] = self.canvas.create_text(r * i, r * j, anchor=NE, fill="white", text="1", tag=str((i, j)))
self.creature = self.canvas.create_rectangle(r * self.x, r * self.y, r * (self.x + 1), r * (self.y + 1),
outline="red", fill="red")
self.canvas.pack(fill=BOTH, expand=1)
#Action
movement = animation.Animation(self.root, self.canvas, self.creature, self.land)
self.root.after(0, movement.animate)
#Clost TK
self.root.mainloop()
a = Alien()
animation.py:
from random import randrange
import sys
class Animation():
def __init__(self, root, canvas, creature, land):
self.x = self.y = 0
self.ctr = 10
self.canvas = canvas
self.creature = creature
self.root = root
self.land = land
#self.root.after(250, self.animate)
self.canvas.move(self.creature, 2 * 50, 2 * 50)
def animate(self):
self.ctr -= 1
if self.ctr > 0:
for i in range(2):
i = randrange(1, 5)
if i == 1:
self.y = -1
elif i == 2:
self.y = 1
elif i == 3:
self.x = -1
elif i == 4:
self.x = 1
#root.after(250, self.animate(canvas, creature))
"""Moves creature around canvas"""
self.movement()
self.root.after(250, self.animate)
def movement(self):
self.canvas.move(self.creature, self.x * 50, self.y * 50)