为什么将保存的文本文件加载到 tkinter (python) 的列表框中时,将每个保存的数据输入显示为一行?

Why when loading the saved text file into list-box of tkinter (python) displays every saved data input into one line?

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()

[请打开并查看下面上传的屏幕截图,以便更好地理解问题]

第一次执行应用程序时
Screenshot of opening application for 1st time
1. 添加"Mike : 11"和"Bob : 22"。这里两者都在 separate lines 中。
2. 保存文件并关闭应用程序。

正在重新启动应用程序
Screenshot of opening application for 2nd time
1. 为什么 Mike 和 Bob 的数据是一样的,我怎样才能让这个东西在不同的行中加载
(完全像:
迈克:11
鲍勃:22
)

两种解决方案:

  1. 更改将文件数据放入 Listbox 的方式。
  2. 更改将它们保存到文件的方式。

对于第一个解决方案,因为你用列表 format.While 保存了一个字符串,你读取了这个保存的文件,字符串将是:

您需要将字符串更改为 list.An 简单方法:

import ast

....

read = open("file.txt","r")
data_list = ast.literal_eval(read.read())
read.close()

或者使用一些字符串处理operation.That有点复杂。

对于第二种方案,只要改变你在每一行保存it.add一个\n的方式。(因为你使用.readlines()来读取文件。)

def save():
    with open("file.txt","w") as f:
        for i in listbox.get(0,END):
            f.write(i+"\n")