Python Tkinter打开文件报错AttributeError,求修复方案
修复Tkinter日记程序的AttributeError问题
这个错误的根源很明确:你用filedialog.askopenfilename()拿到的是文件路径字符串,不是可读取的文件对象,所以调用.read()方法自然会报错——字符串根本没有这个方法。
下面是具体的修复步骤,顺便帮你修正代码里的其他小问题:
关键修复点
- 首先,你漏导入了
filedialog模块,需要在开头补上:from tkinter import filedialog - 重写
openFile函数:拿到文件路径后,要用open()函数打开文件,获取可读取的文件对象,再读取内容 - 修正组件名称错误:你代码里写的
TextArea其实应该是定义好的text组件 - 推荐用
with语句操作文件,它会自动帮你关闭文件,避免资源泄漏
修复后的完整代码
import tkinter.scrolledtext as ScrolledText from tkinter import * from tkinter import filedialog # 补上缺失的导入 root = Tk() root.title("Diary") root.minsize(width=400, height=400) root.maxsize(width=800, height=480) text= ScrolledText.ScrolledText(root, width=400, height=400) text.pack() def donothing(): x = 0 def newFile(): global filename filename = "Untitled" text.delete(0.0, END) def openFile(): rootFilename = filedialog.askopenfilename( initialdir="E:/Images", title="choose your file", filetypes=(("Text file","*.txt"),("all files","*.*")) ) # 检查是否选中了文件(用户可能点了取消) if rootFilename: # 使用with语句打开文件,自动关闭 with open(rootFilename, 'r', encoding='utf-8') as file: contents = file.read() text.delete(0.0, END) # 先清空原有内容再插入 text.insert('1.0', contents) def saveFile(): name = filedialog.asksaveasfile( mode='w', filetypes=(("Text file","*.txt"),("all files","*.*")), defaultextension=".txt" # 加上默认扩展名更友好 ) if name: # 检查用户是否取消了保存 text2save = str(text.get(0.0, END)) name.write(text2save) name.close() # 这里要加括号,调用方法 def Exit(): root.destroy() menubar = Menu(root) filemenu = Menu(menubar, tearoff=0) filemenu.add_command(label="New", command=newFile) filemenu.add_command(label="Open", command=openFile) filemenu.add_command(label="Save", command=saveFile) filemenu.add_separator() filemenu.add_command(label="Exit", command=Exit) menubar.add_cascade(label="File", menu=filemenu) root.config(menu=menubar) root.mainloop()
额外优化说明
- 在
openFile里加了text.delete(0.0, END),打开新文件前先清空原有内容,更符合常规编辑器逻辑 saveFile里加上了defaultextension=".txt",用户保存时会自动添加txt扩展名,不用手动输入- 给
open和asksaveasfile的操作都加了判断,处理用户点击取消的情况,避免报错
内容的提问来源于stack exchange,提问作者Ronald Adams
相关产品推荐
相关产品推荐

