Python Tkinter调用asksaveasfile报AttributeError无config属性问题
问题根因
- 这个报错和Python 3.10语法变更、缺少依赖包完全无关,核心错误是把Tkinter UI组件的方法用到了Python标准文件IO对象上。
filedialog.asksaveasfile()返回值是Python内置的_io.TextIOWrapper文件对象,不是Tkinter界面控件:你调用这个方法时已经传了mode='w'参数,文件默认就是可写入状态,根本不需要额外设置写入模式。- 第25行写的
.config()是Tkinter界面控件(按钮、输入框、文本域这类UI元素)才有的配置方法,普通文件对象没有这个属性,所以抛出AttributeError。 - 你碰到的「文件生成了但是内容为空」的现象,是因为代码运行到第25行就直接崩溃中断了,后面读文本、写文件的逻辑根本没跑,自然只会留下空文件。
修复方案
- 直接删掉第25行多余的
filename.config(mode='w'),就能解决核心报错。 - 建议补充判空逻辑:如果用户在保存弹窗里点了取消,
asksaveasfile()会返回None,不做判断直接调写入方法会触发新的报错。 - 原代码往
pathh控件里插入的是整个文件对象,正常应该展示保存路径,可以通过文件对象的name属性拿到路径字符串。
修复后的完整函数代码:
def saveFiles(): filename = filedialog.asksaveasfile( mode='w', title="Save a File", defaultextension=".txt" ) # 用户点取消时直接退出函数 if filename is None: return # 插入文件路径到路径展示控件 pathh.insert(END, filename.name) # 读取文本域内容写入文件 data = txtarea.get(1.0, END) filename.write(data) filename.close()
内容的提问来源于stack exchange,提问作者Kurt
相关产品推荐
相关产品推荐

