So far it's working, but now I want to make each button clickable, so the button switches between true or false. But I can't find out how to do it. So any help would be appreciated, as well as any improvement in code :)
#!/usr/bin/python
# Filename: gol.py
import time
from Tkinter import *
import threading
class Gol:
'''A board for the game of life'''
def __init__(self, master):
import random
length = 10
aa = []
self.braet = []
self.updated = []
for i in range(length):
aa.append(False)
for i in range(length):
self.braet.append(aa[:])
self.updated.append(aa[:])
# Makes a number of cells alive
for i in range(length*2):
et = random.randrange(length)
to = random.randrange(length)
while self.braet[et][to]:
et = random.randrange(length)
to = random.randrange(length)
self.braet[et][to] = True
self.frame = Frame(master)
self.frame.grid()
# A dictionary with all the buttons
self.dict = {}
for i in range(length):
for j in range(length):
self.dict['%s%s' % (i, j)] = Button(sel.frame, text = ' ')
self.dict['%s%s' % (i, j)].grid(row = i, column = j)
opdater = threading.Thread(target = self.run)
opdater.start()
def show(self):
'''Updates the board, showing the changes since last'''
for i in range(len(self.braet)):
for j in range(len(self.braet[i])):
if self.braet[i][j]:
self.dict['%s%s' % (i, j)].config(text = ' X ')
else:
self.dict['%s%s' % (i, j)].config(text = ' ')
def run(self):
'''Runs the program, continually updating the board'''
while True:
self.show()
time.sleep(1)
self.update()
def update(self):
'''Updates the board
If the cell has 3 live neighbors, it lives. Otherwise it dies'''
# LONG batch of if-sentences, to check how many "neighbours" the cell has. Could probably be done in a better day
for i in range(len(self.updated)):
for j in range(len(self.updated[i])):
self.updated[i][j] = 0
for raekke in range(len(self.braet)):
for celle in range(len(self.braet[raekke])):
cellmates = 0
# Way to many if sentences...
if raekke == 0 or raekke == len(self.braet)-1:
if celle == 0:
if raekke == 0:
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
if self.braet[raekke+1][celle+1]:
cellmates += 1
elif raekke == len(self.braet)-1:
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke-1][celle+1]:
cellmates += 1
elif celle == len(self.braet[raekke])-1:
if raekke == 0:
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
if self.braet[raekke+1][celle-1]:
cellmates += 1
elif raekke == len(self.braet)-1:
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke-1][celle-1]:
cellmates += 1
else:
if raekke == 0:
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke+1][celle-1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
if self.braet[raekke+1][celle+1]:
cellmates += 1
elif raekke == len(self.braet)-1:
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke-1][celle-1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke-1][celle+1]:
cellmates += 1
elif celle == 0 or celle == len(self.braet[raekke])-1:
if celle == 0:
if self.braet[raekke-1][celle+1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke+1][celle+1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
elif celle == len(self.braet[raekke])-1:
if self.braet[raekke-1][celle-1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke+1][celle-1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
else:
if self.braet[raekke-1][celle-1]:
cellmates += 1
if self.braet[raekke-1][celle]:
cellmates += 1
if self.braet[raekke-1][celle+1]:
cellmates += 1
if self.braet[raekke][celle-1]:
cellmates += 1
if self.braet[raekke][celle+1]:
cellmates += 1
if self.braet[raekke+1][celle-1]:
cellmates += 1
if self.braet[raekke+1][celle]:
cellmates += 1
if self.braet[raekke+1][celle+1]:
cellmates += 1
self.updated[raekke][celle] = cellmates
# Updates the board, setting the cells to true or false
for i in range(len(self.updated)):
for j in range(len(self.updated[i])):
if self.updated[i][j] == 3:
self.braet[i][j] = True
elif self.updated[i][j] == 2:
pass
else:
self.braet[i][j] = False
root = Tk()
app = Gol(root)
root.mainloop()
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor