在 tkinter 中保存文件未正确保存
Saving file in tkinter not getting saved properly
我想保存我在列表框中输入的所有文本。 “my_list”是这里的列表框。
但是当我保存我的文件时,我得到了元组形式的输出,如下所示:
("Some","Random","Values")
下面是 python 代码。我已经添加了评论。
add_items 函数将数据添加到输入框中。
savefile函数应该是保存输入框中输入的所有数据(每条输入必须换行)
from tkinter import *
from tkinter.font import Font
from tkinter import filedialog
root = Tk()
root.title('TODO List!')
root.geometry("500x500")
name = StringVar()
############### Fonts ################
my_font = Font(
family="Brush Script MT",
size=30,
weight="bold")
################# Frame #################
my_frame = Frame(root)
my_frame.pack(pady=10)
################# List Box #############
my_list = Listbox(my_frame,
font=my_font,
width=25,
height=5,
bg="SystemButtonFace",
bd=0,
fg="#464646",
highlightthickness=0,
selectbackground="grey",
activestyle="none")
my_list.pack(side=LEFT, fill=BOTH)
############### Dummy List ##################
#stuff = ["Do daily Checkin","Do Event checkin","Complete Daily Task","Complete Weekly Task","Take a break"]
############# Add dummmy list to list box ##############
#for item in stuff:
# my_list.insert(END, item)
################# Ceate Scrollbar ###########################
my_scrollbar= Scrollbar(my_frame)
my_scrollbar.pack(side=RIGHT, fill=BOTH)
#################### Add Scrollbar ######################
my_list.config(yscrollcommand=my_scrollbar.set)
my_scrollbar.config(command=my_list.yview)
################### ADD item entry box#################
my_entry = Entry(root, font=("Helvetica", 24),width=24, textvariable=name)
my_entry.pack(pady=20)
######################## Crete button frame ##########
button_frame=Frame(root)
button_frame.pack(pady=20)
##################### Funnctions ###################
def add_item():
my_list.insert(END, my_entry.get())
name1 = name.get()
my_entry.delete(0, END)
def saveFile():
file = filedialog.asksaveasfile(initialdir="C:\Users\Deepu John\OneDrive\Deepu 2020\Projects\rough",
defaultextension='.txt',
filetypes=[
("Text file",".txt"),
("HTML file", ".html"),
("All files", ".*"),
])
if file is None:
return
#fob = open(file,'w')
filetext = str(my_list.get('1', 'end'))
file.write(filetext)
file.close()
def delete_list():
my_list.delete(0,END)
################# Add Buttons ################
add_button = Button(button_frame, text="Add Item",command=add_item)
save_button = Button(button_frame, text="Save",width=8,command=saveFile)
add_button.grid(row=0,column=1, padx=20)
save_button.grid(row=0,column=2,padx=5)
root.mainloop()
我希望每个值都在一个新行中。像这样:
Some
Random
Values
我该怎么做?
主要部分是 listbox.get(first, last)
returns 一个元组,因此您可以使用 .join
字符串方法创建一个字符串,其中元组中的每个项目都由给定的字符串分隔:
'\n'.join(listbox.get('0', 'end'))
完整示例:
from tkinter import Tk, Entry, Listbox, Button
def add_item(event=None):
item = entry.get() or None
entry.delete('0', 'end')
listbox.insert('end', item)
def save_listbox():
"""the main part:
as `listbox.get(first, last)` returns a tuple
one can simply use the `.join` method
to create a string where each item is separated
by the given string"""
data = '\n'.join(listbox.get('0', 'end'))
with open('my_list.txt', 'w') as file:
file.write(data)
root = Tk()
entry = Entry(root)
entry.pack(padx=10, pady=10)
entry.bind('<Return>', add_item)
listbox = Listbox(root)
listbox.pack(padx=10, pady=10)
button = Button(root, text='Save', command=save_listbox)
button.pack(padx=10, pady=10)
root.mainloop()
还有:
我强烈建议在导入内容时不要使用通配符 (*
),您应该导入您需要的内容,例如from module import Class1, func_1, var_2
等等或导入整个模块:import module
然后你也可以使用别名:import module as md
或类似的东西,关键是不要导入所有东西,除非你真的知道你在做什么;名称冲突是问题所在。
这是一项非常简单的任务。
在保存文件的位置,写入此代码:
newlist = []
for item in mylist.get(0, END):
newlist.append(item)
f = open(file, 'w')
for line in newlist:
f.write(line+'\n')
f.close()
要了解有关在 tkinter 中保存文件的更多信息或使其更容易,您可以在 GitHub 上查看我的 txtopp 存储库。这是我制作的模块:
我想保存我在列表框中输入的所有文本。 “my_list”是这里的列表框。 但是当我保存我的文件时,我得到了元组形式的输出,如下所示:
("Some","Random","Values")
下面是 python 代码。我已经添加了评论。 add_items 函数将数据添加到输入框中。 savefile函数应该是保存输入框中输入的所有数据(每条输入必须换行)
from tkinter import *
from tkinter.font import Font
from tkinter import filedialog
root = Tk()
root.title('TODO List!')
root.geometry("500x500")
name = StringVar()
############### Fonts ################
my_font = Font(
family="Brush Script MT",
size=30,
weight="bold")
################# Frame #################
my_frame = Frame(root)
my_frame.pack(pady=10)
################# List Box #############
my_list = Listbox(my_frame,
font=my_font,
width=25,
height=5,
bg="SystemButtonFace",
bd=0,
fg="#464646",
highlightthickness=0,
selectbackground="grey",
activestyle="none")
my_list.pack(side=LEFT, fill=BOTH)
############### Dummy List ##################
#stuff = ["Do daily Checkin","Do Event checkin","Complete Daily Task","Complete Weekly Task","Take a break"]
############# Add dummmy list to list box ##############
#for item in stuff:
# my_list.insert(END, item)
################# Ceate Scrollbar ###########################
my_scrollbar= Scrollbar(my_frame)
my_scrollbar.pack(side=RIGHT, fill=BOTH)
#################### Add Scrollbar ######################
my_list.config(yscrollcommand=my_scrollbar.set)
my_scrollbar.config(command=my_list.yview)
################### ADD item entry box#################
my_entry = Entry(root, font=("Helvetica", 24),width=24, textvariable=name)
my_entry.pack(pady=20)
######################## Crete button frame ##########
button_frame=Frame(root)
button_frame.pack(pady=20)
##################### Funnctions ###################
def add_item():
my_list.insert(END, my_entry.get())
name1 = name.get()
my_entry.delete(0, END)
def saveFile():
file = filedialog.asksaveasfile(initialdir="C:\Users\Deepu John\OneDrive\Deepu 2020\Projects\rough",
defaultextension='.txt',
filetypes=[
("Text file",".txt"),
("HTML file", ".html"),
("All files", ".*"),
])
if file is None:
return
#fob = open(file,'w')
filetext = str(my_list.get('1', 'end'))
file.write(filetext)
file.close()
def delete_list():
my_list.delete(0,END)
################# Add Buttons ################
add_button = Button(button_frame, text="Add Item",command=add_item)
save_button = Button(button_frame, text="Save",width=8,command=saveFile)
add_button.grid(row=0,column=1, padx=20)
save_button.grid(row=0,column=2,padx=5)
root.mainloop()
我希望每个值都在一个新行中。像这样:
Some
Random
Values
我该怎么做?
主要部分是 listbox.get(first, last)
returns 一个元组,因此您可以使用 .join
字符串方法创建一个字符串,其中元组中的每个项目都由给定的字符串分隔:
'\n'.join(listbox.get('0', 'end'))
完整示例:
from tkinter import Tk, Entry, Listbox, Button
def add_item(event=None):
item = entry.get() or None
entry.delete('0', 'end')
listbox.insert('end', item)
def save_listbox():
"""the main part:
as `listbox.get(first, last)` returns a tuple
one can simply use the `.join` method
to create a string where each item is separated
by the given string"""
data = '\n'.join(listbox.get('0', 'end'))
with open('my_list.txt', 'w') as file:
file.write(data)
root = Tk()
entry = Entry(root)
entry.pack(padx=10, pady=10)
entry.bind('<Return>', add_item)
listbox = Listbox(root)
listbox.pack(padx=10, pady=10)
button = Button(root, text='Save', command=save_listbox)
button.pack(padx=10, pady=10)
root.mainloop()
还有:
我强烈建议在导入内容时不要使用通配符 (*
),您应该导入您需要的内容,例如from module import Class1, func_1, var_2
等等或导入整个模块:import module
然后你也可以使用别名:import module as md
或类似的东西,关键是不要导入所有东西,除非你真的知道你在做什么;名称冲突是问题所在。
这是一项非常简单的任务。 在保存文件的位置,写入此代码:
newlist = []
for item in mylist.get(0, END):
newlist.append(item)
f = open(file, 'w')
for line in newlist:
f.write(line+'\n')
f.close()
要了解有关在 tkinter 中保存文件的更多信息或使其更容易,您可以在 GitHub 上查看我的 txtopp 存储库。这是我制作的模块: