Tkinter删除Entry组件报错:AttributeError: 'object'无delete属性
嘿,我一眼就看出问题出在哪啦!你遇到的AttributeError: 'object' object has no attribute 'delete'错误,根源是变量作用域和初始化的问题,咱们一步步来解决:
错误原因拆解
- 你最开始把全局变量
e赋值成了object()——这就是个普通的空对象,根本没有Entry组件的delete方法 - 在
getname函数里,你虽然创建了真正的Entry实例并命名为e,但这个e是局部变量,和全局的e完全是两个东西!所以当delete_entry函数去调用e.delete()时,它找的是那个全局的空object,自然会报错
修正后的代码
直接改两处就行,看下面的完整代码:
from tkinter import * root = Tk() name = StringVar() # 把全局e初始化为None,而不是无用的object() e = None def getname(): global e # 声明这里要操作全局的e,而不是新建局部变量 e = Entry(root, textvariable=name) e.pack() e.focus_set() b = Button(root, text="Get", width=10, command=callback) b.pack() b2 = Button(root, text="Delete", width=10, command=delete_entry) b2.pack() def callback(): username = name.get() print(username) def delete_entry(): # 先判断e是否已经被初始化为Entry实例,避免空指针错误 if e is not None: e.delete(0, END) # 启动界面 getname() root.mainloop()
关键修改点
- 全局变量初始化:把
e = object()改成e = None,这样我们可以后续检查它是否被正确赋值为Entry组件 - 声明全局变量:在
getname函数里加上global e,确保函数内的e就是全局的那个变量,而不是创建一个局部的新变量 - 安全判断:在
delete_entry里先判断e不为None,防止用户还没点击创建Entry就点Delete按钮导致新的错误
这样修改后,点击Delete按钮就能正常清空输入框啦!
内容的提问来源于stack exchange,提问作者Destiro
相关产品推荐
相关产品推荐

