使用Tkinter点击按钮清空Entry组件报错:字符串无delete属性
问题解决:Tkinter Entry组件清空报错
错误原因
你代码里的EntryPlace = Entry(top,textvariable=user_entry).grid(row=0,column=0)这行存在问题——Tkinter的grid()方法返回值是None,所以EntryPlace实际指向的是None,而非Entry组件对象。当你调用EntryPlace.delete(0, END)时,自然会触发“对象没有delete属性”的报错。
修复方案
方案一:拆分组件创建与布局
将Entry对象的实例化和grid布局操作分开,让EntryPlace指向真正的Entry组件:
from tkinter import * file=open(r'\Users\Armita\Desktop\new file\file_app.txt','a+') def addline(): file.write(user_entry.get() + '\n') EntryPlace.delete(0, END) def savechange(): global file file.close() file = open(r'\Users\Armita\Desktop\new file\file_app.txt','a+') def saveandclose(): file.close() top.destroy() top = Tk() top.geometry('350x40') top.title('Tk') user_entry = StringVar() # 拆分创建与布局操作 EntryPlace = Entry(top,textvariable=user_entry) EntryPlace.grid(row=0,column=0) AddButton = Button(top,text='add line',command= addline).grid(row=0,column=1) SaveButton=Button(top,text='save changes',command= savechange).grid(row=0,column=2) CloseButton1=Button(top,text='save and close',command= saveandclose ).grid(row=0,column=3) top.mainloop()
方案二:通过绑定的StringVar清空
既然已经用textvariable绑定了Entry组件,也可以直接修改这个变量的值来清空输入框:
def addline(): file.write(user_entry.get() + '\n') user_entry.set("") # 将绑定变量设为空字符串,自动清空Entry
额外提示
Tkinter的所有布局方法(grid()、pack()、place())返回值都是None,所以创建组件时必须把实例化和布局操作分开执行,否则会丢失组件对象的引用,后续无法对组件进行任何操作。
内容的提问来源于stack exchange,提问作者armita1
相关产品推荐
相关产品推荐

