Python3运行2to3转换的Python2代码报tkinter属性错误求助
解决AttributeError: module 'tkinter' has no attribute 'tkinter'问题
这个错误是Python2转Python3时tkinter模块结构变化,加上2to3工具没处理好深层属性引用导致的,直接改一行代码就能搞定:
具体修复步骤
- 打开报错的文件
graphicsUtils.py,定位到第294行的函数定义:def keys_pressed(d_o_e=tkinter.tkinter.dooneevent, ...): - 将参数默认值里的
tkinter.tkinter.dooneevent改成tkinter.dooneevent,修改后变成:def keys_pressed(d_o_e=tkinter.dooneevent, ...): - 保存文件后重新运行你的Pacman程序。
为什么会出现这个问题
在Python2中,Tkinter模块内部会嵌套引用底层的tkinter子模块来访问一些底层方法(比如dooneevent),但到了Python3,tkinter模块已经把这些方法直接暴露在顶层了,不需要再通过tkinter.tkinter来访问。2to3工具能处理大部分基础的导入转换(比如把import Tkinter改成import tkinter),但这种深层的属性嵌套引用没被识别出来,所以需要手动修正。
如果之后还遇到类似的tkinter相关错误,记得检查代码里有没有其他tkinter.tkinter.xxx的写法,全部改成tkinter.xxx就好。
内容的提问来源于stack exchange,提问作者Lam Moh
相关产品推荐
相关产品推荐

