from tkinter import*
import webbrowser
def add():
name = entry1.get()
id = entry2.get()
listbox.insert(END, name+ " : " +id)
def delete():
select = listbox.curselection()
index = select[0]
Listbox.delete(index)
def save():
list1 = list(listbox.get(0,END))
f = open("file.txt","w")
f.writelines(str(list1))
f.close()
read = open("file.txt","r")
data_list = read.readlines()
read.close()
data_list = [data.rstrip() for data in data_list]
win = Tk()
win.title("Class")
frame1=Frame(win)
frame2=Frame(win)
frame1.pack()
frame2.pack()
label1 = Label(frame1,text="Name : ")
label1.grid(row=0,column=0)
label2 = Label(frame1,text="Id : ")
label2.grid(row=1,column=0)
name = StringVar()
entry1 = Entry(frame1,textvariable=name)
entry1.grid(row=0,column=1)
id = StringVar()
entry2 = Entry(frame1,textvariable=id)
entry2.grid(row=1,column=1)
scrollbar = Scrollbar(frame2,orient=VERTICAL)
listbox = Listbox(frame2,selectmode=EXTENDED,yscrollcommand=scrollbar.set,width=60)
listbox.pack()
scrollbar.config(command=listbox)
for item in data_list:
listbox.insert(END,item)
button1 = Button(frame2,text="Add",command=add)
button1.pack()
button2 = Button(frame2,text="Delete",command=delete)
button2.pack()
button3 = Button(frame2,text="Save to File",command=save)
button3.pack()
win.mainloop()
[请打开并查看下面上传的截图,以便更好地理解这个问题] 。 第一次执行申请时 第一次打开应用程序的截图 1. 增加 "Mike.11 "和 "Bob.22"。11 "和 "Bob:22"。在这里,两者都在 分行 . 2. 保存文件并关闭应用程序。
重新启动应用程序时 第二次打开应用程序的截图 1. 为什么Mike和Bob的数据会变成一样的,我怎么能让这个东西以单独的行加载(完全像:Mike : 11 Bob : 22)。
两个解决方案。
Listbox
.对于第一种解决方案,因为你保存的是一个列表格式的字符串,当你读取这个保存的文件时,这个字符串将是。
你需要把这个字符串改成list格式,一个简单的方法,或者使用一些字符串处理操作。
import ast
....
read = open("file.txt","r")
data_list = ast.literal_eval(read.read())
read.close()
或者使用一些字符串处理操作,这有点复杂。
对于第二种解决方案,只要改变一下保存方式,在文件中增加一个 "我 "字样,就可以了。\n
因为您使用了 .readlines()
读取文件)。)
def save():
with open("file.txt","w") as f:
for i in listbox.get(0,END):
f.write(i+"\n")