Python tkinter 保存和更改 txt 文件
Posted
技术标签:
【中文标题】Python tkinter 保存和更改 txt 文件【英文标题】:Python tkinter save and change txt file 【发布时间】:2021-04-18 19:17:40 【问题描述】:我的程序只是要求创建一个新的 txt 文件,或者如果它存在,程序会保存它。
def file_open():
global filename
filename = filedialog.askopenfile(mode='r+', filetypes =[('Txt', '*.txt')])
if filename is not None:
t = filename.readlines()
textentry.delete(0, 'end')
for item in t:
textentry.insert(END, item)
我在我的 ListBox 中打开一个现有的 txt 文件。
在对文本进行一些调整后,我正在保存它,但我只能在 txt 中添加新项目。当我删除一个时,我的输出 txt 没有更新。
def file_save():
global filename
if filename == '':
filename = filedialog.asksaveasfile(mode='w', defaultextension=".txt")
if filename is not None:
f = open(filename, "w")
for i in textentry.get(0,'end'):
f.write(i+"\n")
注意:textentry 是一个 ListBox 小部件 我试过这段代码来保存,但没有奏效。当我单击保存按钮时,它应该只是将列表框条目转换为 txt。
我希望你能帮助我。谢谢
【问题讨论】:
写入后尝试关闭文件(f.close()
)。
textentry
是 tkinter.Text
小部件吗?您还知道您的 filename
变量包含文件句柄而不是文件名
【参考方案1】:
假设 textentry
是一个 tkinter.Listbox
小部件,您可以使用它:
def file_open():
global filename
filename = filedialog.askopenfilename(filetypes=(("Text files", "*.txt"), ))
if filename != "":
with open(filename, "r") as file:
data = file.read()
textentry.delete(0, "end")
for line in data.split("\n"):
textentry.insert("end", line)
和
def file_save():
global filename
if filename == "":
filename = filedialog.asksaveasfilename(defaultextension=".txt")
if filename != "":
with open(filenname, "w") as file:
file.write("\n".join(textentry.get(0, "end")))
您的代码的问题是您的 filename
变量包含文件的句柄而不是文件名作为 str
。
【讨论】:
谢谢,但我的 textentry 是一个列表框小部件 @AliCanÇoban 我想我修好了。 第 61 行,在 file_save 中使用 open(filename, "w") as file: TypeError: expected str, bytes or os.PathLike object, not TextIOWrapper 它显示了这个错误@TheLizzard 您是否完全复制了我的代码?我想你要么错过了askopenfilename
或asksaveasfilename
。请注意这些函数名称末尾的name
。
我错过了那部分,但是当我复制完整代码时,单击打开文件按钮时无法打开文件。它给了我 _tkinter.TclError: bad option "-mode": must be -defaultextension, -filetypes, -initialdir, -initialfile, -multiple, -parent, -title, or -typevariable以上是关于Python tkinter 保存和更改 txt 文件的主要内容,如果未能解决你的问题,请参考以下文章