【发布时间】:2019-07-18 11:12:12
【问题描述】:
我正在尝试将我在 python 中制作的代码改编为使用 tkinter 的程序。 我为板上的每个字符(X 和 O)和按钮列表制作了一个列表。每个按钮在按下时应根据情况将其文本从“”更新为“X”或“O”。剩下的代码还没有写出来,但这不是问题。
我使用marcar(i,j,texto) 作为更新按钮文本的函数,使用按钮列表中的按钮位置作为参考。但在第 25 行,出现“列表索引超出范围”的错误。我在第 31 行中使用了相同的命令。我想这是因为在我创建按钮的第 29 行中,用于创建它们的方法之一是方法marcar(),因为它还没有被创建列表中的其他,我无法引用它。
我找不到任何解决方案来制作一个按钮,当按下它时,它使用引用相同按钮的方法,因为要创建它,我需要这个函数。
from tkinter import *
lista = [[" ", " ", " "],
[" ", " ", " "],
[" ", " ", " "]]
buttons = [[], [], []]
vitx = 0
vito = 0
root = Tk()
turno = Label(root, text="Turno de X",font=("Arial",15))
turno.grid(row = 1,column = 1)
vitoriasx = Label(root, text="Vitórias de X:"+str(vitx), font=("Arial",8))
vitoriasx.grid(row = 1,column = 0)
vitoriaso = Label(root, text="Vitórias de O:"+str(vito), font=("Arial",8))
vitoriaso.grid(row = 1,column = 2)
def marcar(i,j,texto):
lista[i][j] = texto
buttons[i][j].config(text= texto)
for i in range(0,3):
for j in range(0,3):
buttons[i].append(Button(root,text=lista[i][j],command = marcar(i,j,"x")))
buttons[i][j].grid(row = i+2,column = j)
buttons[i][j].config(height=6, width=13)
root.mainloop()
【问题讨论】: