Как мне отредактировать текст кнопки, если кнопка находится в списке? - PullRequest
0 голосов
/ 17 сентября 2018

Привет, я использую Python Tkinter и создал список кнопок. Я пытался запрограммировать его, поэтому, если вы нажмете кнопку, текст на нем изменится на X или O (для игры Tic Tac Toe). Я попытался использовать кнопку ["text"] = "текст", но он просто появляется с ошибкой. Вот код на данный момент:

from tkinter import *
import tkinter.messagebox
tk=Tk()
tk.title("Tic Tac Toe")

bclick = True

buttons =  [" "," "," "," "," "," "," "," "," ",]
button_list = [" "," "," "," "," "," "," "," "," ",]
def make_button(n, row, col):
    button_list[n] = Button(tk,text=" ",bg='gray',fg='white',height=4,width=8,command=lambda:ttt(buttons, n))
    button_list[n].grid(row=row,column=col, sticky=S+N+E+W)
    button_list[n] = n

a = 0
B = [0,0,0,1,1,1,2,2,2]
C = [0,1,2,0,1,2,0,1,2]
while a != 9:
    b=B[a]
    c=C[a]
    make_button(a, b, c)
    a+=1

def ttt(buttons, n):
     global bclick
     if buttons[n] == " " and bclick == True:
         buttons[n] = "X"
         button_list[n]["text"] = "X"
         bclick = False
     elif buttons[n] == " " and bclick == False:
          buttons[n] = "O"
          bclick = True

Ошибка в комментарии:

Файл "C: \ Users \ Eva Morris \ Documents \ computing \ Tic-Tac-Toe.py", строка 28, в ttt button_list [n] ["text"] = "X" TypeError: объект 'int' не поддерживает назначение предметов

1 Ответ

0 голосов
/ 18 сентября 2018

Проблема в вашем коде - вы перезаписываете экземпляр Button целым числом:

def make_button(n, row, col):
    button_list[n] = Button(tk,text=" ",bg='gray',fg='white',height=4,width=8,command=lambda:ttt(buttons, n))
    button_list[n].grid(row=row,column=col, sticky=S+N+E+W)
    button_list[n] = n # here you are assigning an INT to button_list[n]

На int доступ через ["text"] не поддерживается. Вот о чем говорит сообщение об ошибке. Вот почему предоставление нам точной ошибки имеет значение .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...