"TclError: Unknown Option" whilst trying to generate 3x3 grid for Noughts and Crosses

"TclError: Unknown Option" whilst trying to generate 3x3 grid for Noughts and Crosses

我正在开发一个小的十字交叉游戏来帮助我从 Python 开始,但我一直收到错误:_tkinter.TclError: unknown option "-11BUTTON",我该如何解决这个问题。

这是我为错误提供一些上下文的代码:

import ThreadManager
import tkinter as tk

class Application(tk.Frame):
    def __init__(self, master=None):
        super().__init__(master)
        self.master = master
        self.pack()
        self.CreateWidgets()

    def CreateWidgets(self):
        ButtonList = []

        for x in range(3):
            for y in range(3):
                self[f'{x+1}{y+1}BUTTON'] = tk.Button(self, text=f'{x+1}{y+1}_BUTTON')
                self[f'{x+1}{y+1}BUTTON'].grid(row=x+1,column=y+1)

        self.RestartApp = tk.Button(self, text="RESTART", fg="green",
                              command=self.restart)
        self.RestartApp.grid(row=4,column=1)
        self.QuitApp = tk.Button(self, text="QUIT", fg="red",
                              command=self.master.destroy)
        self.QuitApp.grid(row=4,column=3)

    def Restart():
        print('Restarting')
        # Start game stuff goes here, I haven't gotten onto this part yet as I've only just started it

Window = tk.Tk()
App = Application(master=Window)
App.mainloop()

我有办法解决这个问题吗?我还没有添加任何游戏功能,ThreadManager 是另一个处理其他内容的文件。

尝试过的东西:

Setting the value to None before setting it as a button.

由于您的 class 继承自 tk.Frame,它继承了框架小部件的所有行为。该行为的一部分是 self[x] 只是 x 属性的一个方便的别名(例如:self['width'] = 100self.configure(width=100) 是同义词)。

错误告诉您 11BUTTON 不是一个有效的属性。如果你这样做 self.configure('11BUTTON') = ...

就会得到同样的错误

你不能用 self[...] 做到这一点。相反,您需要创建一个实例属性。

例如:

self.buttons = {}
for x in range(3):
    for y in range(3):
        self.buttons[f'{x+1}{y+1}BUTTON'] = tk.Button(self, text=f'{x+1}{y+1}_BUTTON')
        ...

尽管如此,如果您使用元组而不是格式化字符串,代码至少可以说更容易理解:

self.buttons[(x,y)] = tk.Button(...)