Почему при загрузке сохраненного текстового файла в список tkinter (python) отображаются все введенные сохраненные данные в одну строку? - PullRequest
1 голос
/ 23 апреля 2020
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". Здесь оба находятся в отдельных строках .
2. Сохранение файла и закрытие приложения.

При перезапуске приложения
Снимок экрана: открытие приложения во второй раз
1. Почему данные Майка и Боба совпадают, и как я могу загрузить эту вещь в отдельные строки
(точно так же:
Майк: 11
Боб: 22 * ​​1026 *)

1 Ответ

3 голосов
/ 23 апреля 2020

Два решения:

  1. Изменить способ ввода данных файла в Listbox.
  2. Изменить способ сохранения их в файл.

Для первого решения, поскольку вы сохраняете строку с форматом списка. Пока вы читаете этот сохраненный файл, строка будет выглядеть следующим образом:

enter image description here

Вам нужно изменить строку в список. Легким способом:

import ast

....

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

Или использовать некоторую операцию обработки строки. Это немного сложно.

Для второго решения просто измените как вы сохраняете it.add \n в каждой строке. (Потому что вы используете .readlines() для чтения файла.)

def save():
    with open("file.txt","w") as f:
        for i in listbox.get(0,END):
            f.write(i+"\n")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...