Итак, я пытаюсь написать игру Tic-Tac-Toe. Я пытаюсь обновить значения после нажатия кнопки. Обновления не залипают и сбрасываются после каждого нажатия кнопки. Я абсолютно озадачен и я новичок, поэтому, пожалуйста, объясните мне, почему мне нужно объявить turn как глобальный в методе main (), так и в методе on_click.
Также краткое объяснение того, почему лямбда: inx = count: on_click (inx) работает, но лямбда: on_click (count) не будет работать.
Любые советы, которые помогут улучшить работу этого кода или сделать его более понятным, будут фантастическими. Я тоже не привык использовать классы, поэтому это все функции. Еще не знаю, где и когда использовать классы.
Я попробовал почти все, что мог придумать, чтобы решить эту проблему, но я не могу понять это.
import tkinter
def on_click(inx):
buttonfont = ('helvetica', 100, 'bold')
global turn
turn += 1
spot = {}
if turn % 2 == 0:
buttons[inx].configure(text='O', width=200, height=200, compound='center', state='disabled', font=buttonfont, disabledforeground='blue')
spot.update({inx: 'O'})
else:
buttons[inx].configure(text='X', width=200, height=200, compound='center', state='disabled', font=buttonfont, disabledforeground='red')
spot.update({inx: 'X'})
def create_window_and_buttons():
game_window = tkinter.Tk()
game_window.title('Tic-Tac-Toe')
for i in range(0, 3):
game_window.rowconfigure(i, weight=1)
game_window.columnconfigure(i, weight=1)
game_window.geometry('600x600')
global pixel
pixel = tkinter.PhotoImage(width=1, height=1)
count = 0
for i in range(3):
for j in range(3):
buttons.append(tkinter.Button(game_window, image=pixel, width=200, height=200, command=lambda inx=count:
on_click(inx)))
buttons[count].grid(row=i, column=j, sticky='NSEW')
count += 1
return game_window
def main():
global turn
turn = 0
global buttons
buttons = []
game_window = create_window_and_buttons()
game_window.mainloop()
if __name__ == '__main__':
main()
Я ожидал, что он обновит словарь, а затем продолжит добавлять значения, но вместо этого он сбрасывается каждый раз. Также имелась та же проблема с переменной поворота перед установкой ее как глобальной в main () и on_click ().