【发布时间】:2021-10-05 13:20:44
【问题描述】:
我正在开发一个小的 noughts and crosss 游戏来帮助我开始使用 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 是另一个处理一些其他内容的文件。
尝试过的东西:
将值设置为
None,然后再将其设置为按钮。
【问题讨论】:
-
self[f'{x+1}{y+1}BUTTON']应该做什么?为什么不直接使用button = tk.Button(...)、button.grid(...)然后ButtonList.append(button)? -
self[...] = X,在小部件子类上,是调用.config()的简写。您可以配置的名称由小部件定义,您不能创建自己的名称。无论如何,动态生成名称通常不是一个好主意,您应该将按钮添加到列表或字典中(看起来ButtonList就是为此目的)。 -
我也不知道
ThreadManager是什么,但是在使用tkinter的线程时要非常小心。如果在其他线程中使用tkinter,可能会导致python崩溃 -
@TheLizzard,它将按钮添加到类中。我是使用 Python 的新手,所以我不确定这是否是最好的选择。
标签: python user-interface tkinter tk