为什么当把保存的文本文件加载到tkinter(python)的list-box中时,会把每个保存的数据输入到一行中显示出来?

问题描述 投票:0回答:1
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)。

python python-3.x tkinter listbox
1个回答
3
投票

两个解决方案。

  1. 改变你把文件数据放在文件中的方式。Listbox.
  2. 改变你将它们保存到文件中的方式。

对于第一种解决方案,因为你保存的是一个列表格式的字符串,当你读取这个保存的文件时,这个字符串将是。

enter image description here

你需要把这个字符串改成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")
© www.soinside.com 2019 - 2024. All rights reserved.