我使用tkinter作为我的可视化工具在python 2.7中运行一个生物模拟器。地图由正方形组成,其中颜色代表土地类型,红色方块代表生物。我使用canvas.move在棋盘周围移动那个红色方块。它必须移动很多。但我确切地知道应该从哪里开始以及应该在哪里结束。问题是,大部分时间它消失了,而不是移动。在下面的代码中,我在Simulation的init中调用move,它可以工作。当我在sim.simulate中随时调用它时,该生物就会消失。任何人都可以解释原因吗?
class Map():
def __init__(self,):
self.root = Tk()
self.canvas = Canvas(self.root, width=1200, height=1200)
self.canvas.pack()
self.colors = {
"Land": "grey",
"Food": "green",
"Water": "blue",
"Shelter": "black"
}
self.canvasDict = {} # the keys are (x,y, "type"), the data is the id so it can be grabbed for item config.
for i, row in enumerate(land.landMass):
for j, tile in enumerate(row):
color = self.colors[tile.__class__.__name__]
self.canvasDict[i, j, "tile"] = self.canvas.create_rectangle(50 * i, 50 * j, 50 * (i + 1), 50 * (j + 1),
outline=color, fill=color)
info = tile.elevation
if color == "green":
info = tile.vegitation
elif color == "black":
info = tile.quality
self.canvasDict[i, j, "text"] = self.canvas.create_text(50 * i + 3, 50 * j, anchor=NW, fill="white", text=info)
self.canvasDict["creature"] = self.canvas.create_rectangle(0, 0, 50, 50,
outline="red", fill="red")
self.canvas.pack(fill=BOTH, expand=1)
sim = Simulation([], 1, 2, self.root, self.canvas, self.canvasDict)
self.root.after(1000, sim.simulate)
... 其他功能 ...
def simulate(self):
self.canvas.move(self.canvasDict["creature"], 1, 1)
if self.generations > 0:
self.root.after(10000, self.canvas.move, self.canvasDict["creature"], 2 * 50, 2 * 50)
...
答案 0 :(得分:0)
我终于意识到发生了什么。我错误地认为.move
会将对象移动到画布上的那个位置,而不是将它移动那么多。因此,当我的方块'消失'时,它实际上只是移动可见的画布。我认为.after
会阻止这些动作,以便我能看到这种情况发生,但显然不是。