Никто не знает, в чем может быть проблема? Кнопки забиндены с нажатием левой кнопкой, при запуске программы они все "нажатые", а нажатия не работают...
Код (сорри, что без комментариев, все объясню, если непонятно; вроде, там ничего сложного...):
from numpy import array
from Tkinter import *
from time import sleep
dimension = 10
start = [(5, 5), (5, 6), (5, 7), (6, 7), (7, 6)]
root = Tk() # окно
root.resizable(False, False)
root.title('Игра "Жизнь"')
frame1=Frame(root,width=1000,height=1000,bg='white',bd=1)
frame2=Frame(root, width=100,bg='gray',bd=1)
frame1.pack(side='left')
frame2.pack(side='right')
area = array([[0]*dimension]*dimension)
for i in start:
area[i[0]][i[1]] = 1
def action(Button, x, y):
if area[y][x] == 0:
Button.configure(bg='red')
area[y][x] = 1
else:
area[y][x] = 0
Button.configure(bg='blue')
lst = []
for x in range(len(area)):
for y in range(len(area[x])):
b = Button(frame1, image="", bg = 'blue', height = 0, width = 0)
b.bind("<Button-1>", action(b, x, y))
lst.append((b, (x, y)))
b.grid(column = x, row = dimension - y)
print area
def game(area):
born = []
die = []
for y in range(len(area)):
for x in range(len(area[y])):
if area[y][x] == 1:
if not survive(x, y):
die.append((x, y))
elif area[y][x] == 0:
if appear(x, y):
born.append((x, y))
for_change = born + die
for i in for_change:
change(i[0], i[1])
def change(x, y):
if area[y][x] == 0:
area[y][x] = 1
else:
area[y][x] = 0
def surrounding(x, y):
N = 0
if x == len(area[y])-1:
if y == len(area)-1:
for i in range(-1, 1):
for j in range(-1, 1):
N = N + area[y+i][x+j]
N = N + (area[0][-1] + area[-1][0] + area[0][-2] + area[-2][0])
else:
for i in range(-1, 2):
N = N + area[y+i][0]
for j in range(-1, 1):
N = N + area[y+i][x+j]
elif y == len(area) - 1:
for j in range(-1, 2):
N = N+ area[0][x+j]
for i in range(-1, 1):
N = N + area[y+i][x+j]
else:
for i in range(-1, 2):
for j in range(-1, 2):
N = N + area[y+i][x+j]
return N - area[y][x]
def survive(x, y):
if surrounding(x, y) <= 1:
return False
elif surrounding(x, y) >= 4:
return False
else:
return True
def appear(x, y):
if surrounding(x, y) == 3:
return True
else:
return False
def play(area):
while True:
game(area)
for i in lst:
if area[i[1]] == 1:
i[0].configure(bg = 'blue')
sleep(0.5)
play_button=Button(frame2, text="Play!")
#play_button.bind("<Button-1>", play(area))
play_button.grid(column=0, row=0)
#for n in range(100):
# sleep(0.5)
# for i in range(len(area)):
# print i, area[i]
# print ' 0 1 2 3 4 5 6 7 8 9'
# print '-'*23
# game(area)
root.mainloop()
print area