Python3.9.7中tkinter出现AttributeError及循环导入问题咨询
问题解析与解决办法
关于"partially initialized module"的含义
简单来说:Python在导入某个模块的过程中,还没把这个模块的所有代码执行完、所有属性加载完成时,又触发了对该模块的再次导入(也就是循环导入),导致模块处于「加载到一半」的状态。这时候模块里的很多属性还没定义,自然就找不到你要访问的内容。
你的具体问题原因
从报错路径能明确看出:你自己的项目目录下有个叫tkinter.py的文件!当你执行import tkinter时,Python会优先加载当前目录下的这个自定义文件,而不是系统自带的tkinter模块。之后在这个自定义的tkinter.py第13行,你写了root = tkinter.tk(),这相当于又要导入tkinter(也就是你自己的这个文件),但此时这个文件还没加载完,形成了循环导入,导致模块处于部分初始化状态;同时你还写错了系统tkinter的API(正确写法是大写的Tk(),而非小写的tk())。
解决步骤
- 立刻重命名你自己的
tkinter.py文件,比如改成my_gui.py,绝对不能和系统自带的模块名重名。 - 删除当前目录下的
__pycache__文件夹(这是Python生成的模块缓存,不删除可能会残留旧问题)。 - 修正代码错误:如果是用系统tkinter创建窗口,应写
root = tkinter.Tk();如果只是测试tkinter是否正常,直接运行tkinter._test()即可(前提是模块导入正确)。
内容的提问来源于stack exchange,提问作者Mick Hawkes
相关产品推荐
相关产品推荐

