Python Tkinter报错'NoneType' object has no attribute 'config'如何解决
Tkinter代码商店程序报错修复方案
报错根因
- Tkinter的布局方法(
grid/pack/place)返回值为None,你将组件创建和布局逻辑写在同一行并赋值给变量,导致变量实际是None值,调用config方法时触发AttributeError - 代码存在拼写错误,部分位置将方法名
config错写为cofig - 原有逻辑每次点击购买都会重复创建Label组件,同一位置叠加多个组件会导致性能和显示异常
修复步骤
步骤1:修改初始数量Label的定义,保留组件引用
将原来的数量Label创建和布局拆分为两行,保存Label对象供后续修改属性:
# **** Amount of Code **** phy_global = 0 c_plus_global = 0 java_global = 0 scratch_global = 0 # 拆分组件创建与布局调用,保留Label对象引用 phy_amount_label = Label(middle_frame, text="/") phy_amount_label.grid(row=1, column=2) c_plus_amount_label = Label(middle_frame, text="/") c_plus_amount_label.grid(row=2, column=2) java_amount_label = Label(middle_frame, text="/") java_amount_label.grid(row=3, column=2) scratch_amount_label = Label(middle_frame, text="/") scratch_amount_label.grid(row=4, column=2)
步骤2:重写buying函数,优化逻辑并修正错误
不需要每次购买都新建Label,直接修改已有Label的text属性即可,同时修正拼写错误:
def buying(): code_to_buy = selected_code.get() if code_to_buy == "1": global phy_global phy_global += 1 phy_amount_label.config(text=phy_global) elif code_to_buy == "2": global c_plus_global c_plus_global += 1 c_plus_amount_label.config(text=c_plus_global) elif code_to_buy == "3": global java_global java_global += 1 java_amount_label.config(text=java_global) elif code_to_buy == "4": global scratch_global scratch_global += 1 scratch_amount_label.config(text=scratch_global)
可选优化
如果你的本地不存在图标文件c:/GUIs_Images/root_img.png,可以暂时注释掉图标相关的两行代码,避免启动报错。
内容的提问来源于stack exchange,提问作者Mr.Kuchenversum
相关产品推荐
相关产品推荐

