Python 未将任何属性指定给对象时获取属性错误

Python 未将任何属性指定给对象时获取属性错误,python,python-3.x,tkinter,Python,Python 3.x,Tkinter,我正在尝试用Tkinter制作一个简单的彩色游戏,以下是我到目前为止编写的代码: 从tkinter导入* 导入系统 随机输入 window=Tk()#初始化窗口 窗几何(“653x500+78+78”) window.title(“欢迎来到彩色游戏!”) c=画布(窗口,高度=500,宽度=653,highlightthickness=0)#添加bg以测试画布是否在窗口中 c、 包() 说明=“欢迎来到彩色游戏!在这个游戏中,你将在屏幕上看到一个单词。它将是 一种颜色,像红色。 你所要做的就是输

我正在尝试用Tkinter制作一个简单的彩色游戏,以下是我到目前为止编写的代码:

从tkinter导入*
导入系统
随机输入
window=Tk()#初始化窗口
窗几何(“653x500+78+78”)
window.title(“欢迎来到彩色游戏!”)
c=画布(窗口,高度=500,宽度=653,highlightthickness=0)#添加bg以测试画布是否在窗口中
c、 包()
说明=“欢迎来到彩色游戏!在这个游戏中,你将在屏幕上看到一个单词。它将是
一种颜色,像红色。
你所要做的就是输入单词的颜色,而不是单词本身。所以如果单词是红色的,但是
文本颜色为绿色,然后您必须键入绿色。您将看到该单词1.5秒,这足够长的时间
看一个单词,让你的大脑识别一种颜色。享受吧!!!
哦,是的,如果你输入真实的单词,你实际上会失去分数:D
"""
text=c.create_text(325100,text=instructions,font=(“Helvetica”,10))
def start():#这将是主游戏发生的地方
秒=2000
window.draw()#关闭主菜单
#这里我们配置窗口boi
main=Tk()
主要几何图形(“653x500+78+78”)
main.title(“输入单词的颜色,而不是单词本身”)
main.focus_force()
main.configure(bg=“白色”)
颜色=[“红色”、“蓝色”、“绿色”、“橙色”、“紫色”、“棕色”、“黄色”]
choose=colors.copy()#复制列表,这样我们就可以更改元素,而不必实际禁用原始列表。
文本颜色=随机。选择(选择)
选择。删除(文本颜色)
实际颜色=随机。选择(选择)
text=标签(主,text=文本颜色,fg=实际颜色,bg=“白色”,font=(“Helvetica”,20))
text.place(relx=0.5,rely=0.5,anchor=“center”)
倒计数=标签(main,text=int(int(second)/1000),fg=random.choice(colors),bg=“white”,font=(“Helvetica”,20))
倒计时。放置(relx=0.5,rely=0.25,anchor=“center”)
秒-=1000
主。后(1000,开始)
def nevermind():#nevermind函数。完成状态
window.draw()
last=Tk()
最后,几何(“350x200”)
最后。标题(“你确定吗?”)
t=Label(最后,text=“不要退出!退出是为了NOOBS!”)
t、 放置(relx=0.5,rely=0.45,anchor=“center”)
lastt=标签(last,text=“您确定吗?”)
最后位置(relx=0.5,rele=0.55,anchor=“center”)
def YES():
最后,销毁
window.deiconify()
yes=按钮(最后,text=“yes”,command=退出)
否=按钮(最后,text=“否”,命令=是)
是。放置(relx=0.25,rely=0.95,relwidth=0.5,relheight=0.1,anchor=“center”)
否位置(relx=0.75,rely=0.95,relwidth=0.5,relheight=0.1,anchor=“center”)
#添加开始按钮和无终止按钮;D
开始=按钮(窗口,text=“开始游戏!”,bd=0,highlightthickness=0,bg=“粉蓝”,activebackground=“粉蓝”,command=start)
开始.放置(relx=0.25,rely=0.95,relwidth=0.5,relheight=0.1,anchor=“center”)
never\u mind=按钮(窗口,text=“never mind!”,bd=0,highlightthickness=0,bg=“orange”,activebackground=“orange”,command=nevermind)
没关系。放置(relx=0.75,rely=0.95,relwidth=0.5,relheight=0.1,anchor=“center”)
window.mainloop()#始终添加以下内容:D
以下是我所得到的错误的特定函数:

def start():#这将是主游戏发生的地方
秒=2000
window.draw()#关闭主菜单
#这里我们配置窗口boi
main=Tk()
主要几何图形(“653x500+78+78”)
main.title(“输入单词的颜色,而不是单词本身”)
main.focus_force()
main.configure(bg=“白色”)
颜色=[“红色”、“蓝色”、“绿色”、“橙色”、“紫色”、“棕色”、“黄色”]
choose=colors.copy()#复制列表,这样我们就可以更改元素,而不必实际禁用原始列表。
文本颜色=随机。选择(选择)
选择。删除(文本颜色)
实际颜色=随机。选择(选择)
text=标签(主,text=文本颜色,fg=实际颜色,bg=“白色”,font=(“Helvetica”,20))
text.place(relx=0.5,rely=0.5,anchor=“center”)
倒计数=标签(main,text=int(int(second)/1000),fg=random.choice(colors),bg=“white”,font=(“Helvetica”,20))
倒计时。放置(relx=0.5,rely=0.25,anchor=“center”)
秒-=1000
主。后(1000,开始)
但我得到了一个错误:

>   main.after(1000, start)
  File "C:\Users\offcampus\AppData\Local\Programs\Python\Python35\lib\tkinter\__init__.py", line 611, in after
    callit.__name__ = func.__name__
AttributeError: 'Button' object has no attribute '__name__'
我已经看过了,但是我真的很困惑,因为我没有为
按钮
类指定任何属性


那么这里发生了什么?

您正在重用名称
start
这里:

start = Button(window, text = "Start Game!", bd = 0, highlightthickness = 0, bg = "powder blue", activebackground = "powder blue", command = start)
因此,当您调用
main.after(1000,start)
时,它试图使用该按钮,但是
main.after()
的第二个参数需要是一个函数


不要对变量和函数使用相同的名称--重命名用于“开始游戏”按钮的变量,或重命名函数。

也要读取发生错误的原因,因为作为实现
的一部分。
逻辑后,Tkinter需要分配
按钮
没有的属性。真正的线索是,您不希望代码中提到的任何东西是
按钮
,但其中一个(特别是
开始
)是。但是,如果您使用
。在
之后递归地创建游戏循环,您不应该在该循环中创建您的Tk实例。@HenryYik我现在明白了问题所在。@KarlKnechtel是的,我明白了,我已经稍微修改了代码。