Я использую time.wait, чтобы показать, как изменится холст при обработке кода, но когда я фактически запускаю код, оболочка python останавливается и показывает холст после того, как все вычисления выполнены и время прошло. Как я могу показать обрабатываемый код? Код ниже об игре жизни.
game_of_life_GUI создает окно для Tkinter, рисует квадраты и собирает его. Increase_map увеличивает размер двухмерного списка на единицу с каждой стороны. next_turn выполняет вычисления и вносит изменения. Переменная map create_random_map создает двумерный список со случайным значением int 0 и 1
master = Tk()
class game_of_life_GUI() :
def __init__(self, WIDTH, HEIGHT) :
self.width = WIDTH
self.height = HEIGHT
self.start = (self.width - self.height)/2
def draw(self, w, Map) :
square_length = self.height / len(Map)
for i in range(len(Map)) :
for j in range(len(Map[i])) :
if(Map[i][j] == 0) :
w.create_rectangle(self.start + i*square_length, j*square_length,
self.start + (i+1)*square_length, (j+1)*square_length,
fill = "white", outline = "black")
else :
w.create_rectangle(self.start + i*square_length, j*square_length,
self.start + (i+1)*square_length, (j+1)*square_length,
fill = "black", outline = "black")
w.pack()
def increase_map(Map) :
for i in range(len(Map)) :
Map[i].append(0)
Map[i].append(0)
Map[i][1:-1] = Map[i][0:-2].copy()
Map[i][0] = 0
Map.insert(0, [0]*len(Map[0]))
Map.append([0]*len(Map[0]))
return Map
def next_turn(Map) :
num_y = [-1, 0, 1, -1, 1, -1, 0, 1]
num_x = [1, 1, 1, 0, 0, -1, -1, -1]
flag = 0
new_Map = copy.deepcopy(Map)
for i in range(len(Map)) :
for j in range(len(Map[0])) :
sum = 0
for p in range(8) :
try :
if(Map[i + num_y[p]][j + num_x[p]] == 1) : sum +=1
except Exception as e :
pass
if (Map[i][j] == 1 and (sum == 2 or sum == 3)) :
new_Map[i][j] = 1
if(flag == 0 and (i ==0 or j == 0)) :
flag = 1
elif (Map[i][j] == 0 and sum == 3) :
new_Map[i][j] = 1
if(flag == 0 and (i==0 or j==0)) :
flag = 0
else :
new_Map[i][j] = 0
return (new_Map, flag)
def life_game(Map, num, flag, width, height) :
GUI = game_of_life_GUI(width, height)
w = Canvas(master, width = width, height = height)
for i in range(num) :
if (flag == 1) :
Map = increase_map(Map)
Map, flag = next_turn(Map)
GUI.draw(w, Map)
return Map
def create_random_map(length) :
ls = []
for i in range(length) :
ls.append([])
for j in range(length) :
ls[i].append(rd.randrange(0, 2))
return ls
LENGTH = 5
WIDTH, HEIGHT = (500, 500)
ROTATION = 1
Map = create_random_map(LENGTH)
print(Map)
Game = life_game(Map, ROTATION, flag = 1, width = WIDTH, height = HEIGHT)
.