我正在使用Python实现Conway的生活游戏,并希望制作一个小型GUI来观察模型的演变。
我的代码:
def __init__(self,grid):
self.top = Tkinter.Tk()
self.multiplier = 50
self.gridSize = grid.getSize()
self.gridArray = grid.getGrid()
self.C = Tkinter.Canvas(self.top, bg="black", height = self.gridSize[1]*self.multiplier,
width=self.gridSize[0]*self.multiplier)
self.C.pack()
def renderGrid(self, grid):
for x in range(0,self.gridSize[1]-1):
for y in range(0,self.gridSize[0]-1):
agent = grid.getAtPos(Coordinates2D(x,y))
agent = agent[0]
mx = x*self.multiplier
my = y*self.multiplier
if(agent.state == 0):
p = self.C.create_rectangle(mx,my,mx+self.multiplier,my+self.multiplier,
fill="white", width=3)
self.C.update()
我基本上希望能够将网格对象传递给此类,并让代理状态为0的地方更新画布绘制白色方块。
虽然这在原理上有效(即:它产生初始显示)但它似乎没有更新。我称之为的代码:
grid = ObjectGrid2D(10,10, "golgrid")
g = GameOfLifeRenderer(grid)
for i in range(10):
print i
for x in range(10):
for y in range(10):
h = GOLCell(1)
h.state == 0
grid.moveAgent(Coordinates2D(x,y), h)
g.renderGrid(grid)
sleep(5)
关于如何改进我的代码的任何建议?
谢谢!
答案 0 :(得分:2)
您似乎没有更新forloop中的画布。尝试在 g.C.update()
// Get the data
d3.csv("php/air_temperature_data.php", function(error, data) {
data.forEach(function(d) {
d.date = parseDate(d.date);
d.close = +d.close;
}
//... SHOULD BE IN HERE
);
// ALL THIS STUFF...
var tickValues = data.map(function(d) { return d.date; });
xAxis
.tickValues(tickValues)
.tickFormat(d3.time.format('%H:%M'));
// Scale the range of the data
x.domain(d3.extent(data, function(d) { return d.date; }));
y.domain([0, d3.max(data, function(d) { return d.close; })]);
// Add the valueline path.
svg.append("path")
.attr("class", "line")
.attr("d", valueline(data));