Как создать и передать информацию из файла в виджет Treeview?

столкнулся с такой проблемой,нужно в моей программе создать новый пустой файл(только если его нету,если есть то создавать не нужно), и по ходу работы с программой необходимо заполнять его данными которые мы вводим в виджет Treeview. И при закрытии и повторном открытии программы наши введенные данные в таблицу должны быть снова в ней(Сохранение нашей работы). Я облазил многие статьи и форумы и понял что нужно использовать библиотеку Pandas, но проблема в том что я ее никогда не использовал. Если у вас есть пример кода(который выполняет нужные мне задачи) или вы можете сами сделать эти необходимые функции то надеюсь на вашу помощь,ниже прикрепляю код программы,так же добавил комментарии к коду что бы можно было разобраться

Код программы:

import tkinter as tk
import tkinter.ttk as ttk
import csv
from turtle import pd
import openpyxl


class Main(tk.Frame): #Главное окно
    def __init__(self, root):
        super().__init__(root)
        self.init_main()

    def init_main(self):
        toolbar = tk.Frame(self, bg="#d7d8e0", bd=10)
        toolbar.pack(side=tk.TOP, fill=tk.X)

        btn_open_dialog1 = tk.Button(toolbar, text="Заявка", command=lambda: self.open_dialog1(), bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog1.pack(side=tk.LEFT)

        self.add_img = tk.PhotoImage(file="icons8-администратор-microsoft-50.png")
        btn_open_dialog2 = tk.Button(toolbar, text="ЗаявкаГАИ", command=lambda: self.open_dialog2(), bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog2.pack(side=tk.LEFT)

        self.add_img2 = tk.PhotoImage(file="icons8-администратор-microsoft-50.png")
        btn_open_dialog3 = tk.Button(toolbar, text="Администратор", command=lambda: self.open_dialog3(), bg="#d7d8e0",
                                     bd=0, compound=tk.LEFT)
        btn_open_dialog3.pack(side=tk.LEFT)

    def open_dialog2(self):
        ZaiavkaGAI()

    def open_dialog1(self):
        Zaiavka()

    def open_dialog3(self):
        Admin()


class Sotrudniki(tk.Toplevel): # Сотрудники
    def __init__(self):
        super().__init__(root)
        self.Treeview = None
        self.title("Сотрудники")
        self.geometry("600x420+400+300")
        self.resizable(False, False)

        toolbar2 = tk.Frame(self, bg='#d8d9e9', bd=0)
        toolbar2.pack(side=tk.TOP, fill=tk.X)
        btn_open_dialog8 = tk.Button(toolbar2, text="Добавить сотрудника",
                                     command=lambda: self.init_Dobavlenie_Sotrudnika(),
                                     bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog8.pack(side=tk.LEFT)
        btn_open_dialog9 = tk.Button(toolbar2, text="Удалить сотрудника", command=lambda: self.Del_SOT(),
                                     bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog9.pack(side=tk.LEFT)

        self.grab_set()
        self.focus_set()

        #Таблица с сотрудниками

        self.tree = ttk.Treeview(self, columns=("ID", "FIO driver", "nomber ud", "nomber pass", "age jods",), height=15,
                                 show="headings")
        self.tree.column("ID", width=20, anchor=tk.CENTER)
        self.tree.column("FIO driver", width=150, anchor=tk.CENTER)
        self.tree.column("nomber ud", width=150, anchor=tk.CENTER)
        self.tree.column("nomber pass", width=120, anchor=tk.CENTER)
        self.tree.column("age jods", width=170, anchor=tk.CENTER)

        self.tree.heading("ID", text="ID")
        self.tree.heading("FIO driver", text="ФИО водителя эвак.")
        self.tree.heading("nomber ud", text="Номер удостоверения")
        self.tree.heading("nomber pass", text="Номер паспорта")
        self.tree.heading("age jods", text="Трудовой стаж")
        self.tree.pack()
        ysb = ttk.Scrollbar(self, orient=tk.VERTICAL, command=self.tree.yview)
        self.tree.configure(yscroll=ysb.set)
        self.id = 1
        self.iid = 1
        self.Treeview = self.tree
        with open("Sotrudniki.data", newline="") as f:
            for Sotrudniki in csv.reader(f):
                self.tree.insert("", tk.END,values=Sotrudniki)
        self.tree.bind("TreeviewSelect")

    def init_Dobavlenie_Sotrudnika(self): #добавление сотрудника
        super().__init__(root)
        self.title("Добавить сотрудника")
        self.geometry("400x320+400+300")
        self.resizable(False, False)

        label_FIO_driver = tk.Label(self, text="ФИО сотрудника")
        label_FIO_driver.place(x=80, y=30)

        label_entry_nomber_ud = tk.Label(self, text="Номер удостоверения")
        label_entry_nomber_ud.place(x=50, y=60)

        label_entry_nomber_pass = tk.Label(self, text="Номер паспорта")
        label_entry_nomber_pass.place(x=80, y=90)

        label_entry_age_jobs = tk.Label(self, text="Трудовой стаж")
        label_entry_age_jobs.place(x=90, y=120)

        self.FIO_driver = ttk.Entry(self)
        self.FIO_driver.place(x=180, y=30)

        self.entry_nomber_ud = ttk.Entry(self)
        self.entry_nomber_ud.place(x=180, y=60)

        self.entry_nomber_pass = ttk.Entry(self)
        self.entry_nomber_pass.place(x=180, y=90)

        self.entry_entry_age_jobs = ttk.Entry(self)
        self.entry_entry_age_jobs.place(x=180, y=120)

        btn_cansel = ttk.Button(self, text="Закрыть", command=self.destroy)
        btn_cansel.place(x=240, y=250)

        btn_add = ttk.Button(self, text="Добавить", command=lambda: [self.dob_Sot(),self.ZapisSOT()])
        btn_add.place(x=70, y=250)

        self.grab_set()
        self.focus_set()

    def dob_Sot(self): #функция добавления в таблицу
        self.Treeview.insert('', "end", iid=self.iid, values=(self.id, self.FIO_driver.get(), self.entry_nomber_ud.get(),
                                     self.entry_nomber_pass.get(), self.entry_entry_age_jobs.get()
                                     ))
        self.iid = self.iid + 1
        self.id = self.id + 1

    def Del_SOT(self): #Функция удаления
        row_id = int(self.tree.focus())

        self.Treeview.delete(row_id)

    def ZapisSOT(self): #Запись в файл(мои попытки сделать все самому)
        file = open("Zaiavki.data","w")
        file.write(str(self.id))
        file.write(str(self.FIO_driver.get()))
        file.write(str(self.entry_nomber_ud.get()))
        file.write(str(self.entry_nomber_pass.get()))
        file.write(str(self.entry_entry_age_jobs.get()))



class ZaiavkiADM(tk.Toplevel): #окно с заявками от лица администратора
    def __init__(self):
        super().__init__(root)
        self.title("Заявления на эвакуацию")
        self.geometry("897x350+400+300")
        self.resizable(False, False)

        self.grab_set()
        self.focus_set()
        toolbar2 = tk.Frame(self, bg='#d8d9e9', bd=0)
        toolbar2.pack(side=tk.TOP, fill=tk.X)

        btn_open_dialog9 = tk.Button(toolbar2, text="Удалить заявку", command=lambda: self.Del_ZAI(),
                                     bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog9.pack(side=tk.LEFT)

        self.tree = ttk.Treeview(self, columns=("ID", "FIO driver", "nomber ud", "nomber pass", "nomber car", "Data",
                                                "Nomber_tel", "Vid"),
                                 height=15, show="headings")
        self.tree.column("ID", width=25, anchor=tk.CENTER)
        self.tree.column("FIO driver", width=120, anchor=tk.CENTER)
        self.tree.column("nomber ud", width=135, anchor=tk.CENTER)
        self.tree.column("nomber pass", width=120, anchor=tk.CENTER)
        self.tree.column("nomber car", width=120, anchor=tk.CENTER)
        self.tree.column("Data", width=150, anchor=tk.CENTER)
        self.tree.column("Nomber_tel", width=110, anchor=tk.CENTER)
        self.tree.column("Vid", width=150, anchor=tk.CENTER)

        self.tree.heading("ID", text="ID")
        self.tree.heading("FIO driver", text="ФИО водителя")
        self.tree.heading("nomber ud", text="Номер удостоверения")
        self.tree.heading("nomber pass", text="Номер паспорта")
        self.tree.heading("nomber car", text="Номер машины")
        self.tree.heading("Data", text="Дата подачи заявления")
        self.tree.heading("Nomber_tel", text="Номер телефона")
        self.tree.heading("Vid", text="Вид заявления")
        self.tree.pack()

        file = open("Zaiavki.data")
        file.read()

    def Del_ZAI(self):  #Удаление заявок
        row_id = int(self.tree.focus())

        self.Treeview.delete(row_id)




class ZaiavkaGAI(tk.Toplevel):  #Заполнение заявки от лица ГАИ

    def __init__(self):
        super().__init__(root)
        self.title("Заполнить заявку ГАИ")
        self.geometry("400x320+400+300")
        self.resizable(False, False)

        label1 = tk.Label(self, text="Сотрудник ГАИ", fg="#eee", bg="#333")
        label1.pack()

        label_FIO_driver = tk.Label(self, text="ФИО водителя")
        label_FIO_driver.place(x=80, y=30)

        label_entry_ud = tk.Label(self, text="Номер удостоверения")
        label_entry_ud.place(x=60, y=60)

        label_entry_pass = tk.Label(self, text="Номер паспорта")
        label_entry_pass.place(x=80, y=90)

        label_entry_nomder_car = tk.Label(self, text="Номер машины")
        label_entry_nomder_car.place(x=80, y=120)

        label_Nomber_tel = tk.Label(self, text="Номер телефона")
        label_Nomber_tel.place(x=80, y=150)

        label_Data = tk.Label(self, text="Дата заполнения")
        label_Data.place(x=80, y=180)

        self.vid = "ГАИ"

        self.entry_FIO_driver = ttk.Entry(self)
        self.entry_FIO_driver.place(x=190, y=30)

        self.entry_ud = ttk.Entry(self)
        self.entry_ud.place(x=190, y=60)

        self.entry_pass = ttk.Entry(self)
        self.entry_pass.place(x=190, y=90)

        self.entry_nomder_car = ttk.Entry(self)
        self.entry_nomder_car.place(x=190, y=120)

        self.Nomber_tel = ttk.Entry(self)
        self.Nomber_tel.place(x=190, y=150)

        self.Data = ttk.Entry(self)
        self.Data.place(x=190, y=180)

        btn_cansel = ttk.Button(self, text="Закрыть", command=self.destroy)
        btn_cansel.place(x=240, y=250)

        btn_add = ttk.Button(self, text="Добавить", command=self.ZapisGAI)
        btn_add.place(x=70, y=250)

        self.id = 1
        self.iid = 1

        self.grab_set()
        self.focus_set()

    def ZapisGAI(self):  #Мои те же самые попытки все самому сделать
        file = open("Zaiavki.data","w")
        file.write(str(self.id))
        file.write(str(self.entry_FIO_driver.get()))
        file.write(str(self.entry_ud.get()))
        file.write(str(self.entry_pass.get()))
        file.write(str(self.entry_nomder_car.get()))
        file.write(str(self.Nomber_tel.get()))
        file.write(str(self.Data.get()))
        file.write(str(self.vid))
        self.entry_FIO_driver.delete(0,"end")
        self.entry_ud.delete(0, "end")
        self.entry_pass.delete(0, "end")
        self.entry_nomder_car.delete(0, "end")
        self.Nomber_tel.delete(0, "end")
        self.Data.delete(0, "end")



class Zaiavka(tk.Toplevel):  #Заполнение заявки от лица обычного человека
    def __init__(self):
        super().__init__()
        self.init_Zaiavka()

    def init_Zaiavka(self):
        self.title("Заполнить заявку")
        self.geometry("400x320+400+300")
        self.resizable(False, False)
        label1 = tk.Label(self, text="Частное лицо", fg="#eee", bg="#333")
        label1.pack()

        label_FIO_driver = tk.Label(self, text="ФИО водителя")
        label_FIO_driver.place(x=80, y=30)

        label_entry_ud = tk.Label(self, text="Номер удостоверения")
        label_entry_ud.place(x=50, y=60)

        label_entry_pass = tk.Label(self, text="Номер паспорта")
        label_entry_pass.place(x=80, y=90)

        label_entry_nomder_car = tk.Label(self, text="Номер машины")
        label_entry_nomder_car.place(x=80, y=120)

        label_Nomber_tel = tk.Label(self, text="Номер телефона")
        label_Nomber_tel.place(x=80, y=150)

        label_Data = tk.Label(self, text="Дата заполнения")
        label_Data.place(x=80, y=180)

        self.FIO_driver1 = ttk.Entry(self)
        self.FIO_driver1.place(x=180, y=30)

        self.entry_ud1 = ttk.Entry(self)
        self.entry_ud1.place(x=180, y=60)

        self.entry_pass1 = ttk.Entry(self)
        self.entry_pass1.place(x=180, y=90)

        self.entry_nomder_car1 = ttk.Entry(self)
        self.entry_nomder_car1.place(x=180, y=120)

        self.Nomber_tel = ttk.Entry(self)
        self.Nomber_tel.place(x=180, y=150)

        self.Data = ttk.Entry(self)
        self.Data.place(x=180, y=180)

        self.vid = "Частное лицо"

        self.iid = 1
        self.id = 1

        self.grab_set()
        self.focus_set()

        btn_cansel = ttk.Button(self, text="Закрыть", command=self.destroy)
        btn_cansel.place(x=240, y=250)

        btn_add = ttk.Button(self, text="Добавить", command=self.Zapis)
        btn_add.place(x=70, y=250)

    def Zapis(self):  # Те же самые попытки
        file = open("Zaiavki.data","w")
        file.write(str(self.id))
        file.write(str(self.FIO_driver1.get()))
        file.write(str(self.entry_ud1.get()))
        file.write(str(self.entry_pass1.get()))
        file.write(str(self.entry_nomder_car1.get()))
        file.write(str(self.Nomber_tel.get()))
        file.write(str(self.Data.get()))
        file.write(str(self.vid))
        self.FIO_driver1.delete(0, "end")
        self.entry_ud1.delete(0, "end")
        self.entry_pass1.delete(0, "end")
        self.entry_nomder_car1.delete(0, "end")
        self.Nomber_tel.delete((0, "end"))
        self.Data.delete(0, "end")





class Protocol(tk.Toplevel):  #Окно с таблицей где все протоколы
    def __init__(self):
        super().__init__()
        self.title("Протокол")
        self.geometry("900x420+400+300")
        self.resizable(True, True)
        self.grab_set()
        self.focus_set()
        toolbar2 = tk.Frame(self, bg='#d8d9e9', bd=0)
        toolbar2.pack(side=tk.TOP, fill=tk.X)
        btn_open_dialog7 = tk.Button(toolbar2, text="Заполнить протокол эвакуации",
                                     command=lambda: self.init_Dobavlenie_Protocol(),
                                     bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog7.pack(side=tk.LEFT)
        btn_open_dialog9 = tk.Button(toolbar2, text="Удалить протокол", command=lambda: self.Del_Prot(),
                                     bg="#d7d8e0", bd=0, compound=tk.LEFT)
        btn_open_dialog9.pack(side=tk.LEFT)
        self.tree = ttk.Treeview(self, columns=("ID", "nomber car arrest", "FIO driver", "nomber car", "adress arest",
                                                "adres stop", "Data arrest"), height=15,
                                 show="headings")
        self.tree.column("ID", width=20, anchor=tk.CENTER)
        self.tree.column("nomber car arrest", width=150, anchor=tk.CENTER)
        self.tree.column("FIO driver", width=150, anchor=tk.CENTER)
        self.tree.column("nomber car", width=120, anchor=tk.CENTER)
        self.tree.column("adress arest", width=170, anchor=tk.CENTER)
        self.tree.column("adres stop", width=170, anchor=tk.CENTER)
        self.tree.column("Data arrest", width=150, anchor=tk.CENTER)

        self.tree.heading("ID", text="ID")
        self.tree.heading("nomber car arrest", text="Номер эвак. машины")
        self.tree.heading("FIO driver", text="ФИО водителя")
        self.tree.heading("nomber car", text="Номер эвакуатора")
        self.tree.heading("adress arest", text="Место эвакуации")
        self.tree.heading("adres stop", text="Место доставки")
        self.tree.heading("Data arrest", text="Дата эвакуации")
        self.tree.pack()
        self.id = 1
        self.iid = 1
        self.Treeview = self.tree

#еще мои попытки разобраться самому

    writer = pd.ExcelWriter('nameofexcelfiletocreate.xlsx')  # Creates this excel file
    df = pd.read_csv('new.csv')  # Reads the csv and makes a dataframe

    df.to_excel(writer, 'sheet1')  # Writes the dataframe to excel file
    writer.save()  # Saves the file

    def init_Dobavlenie_Protocol(self):  #Функция добавления
        super().__init__(root)
        self.title("Заполнить протокол")
        self.geometry("400x320+400+300")
        self.resizable(False, False)

        label_nomber_car_driver = tk.Label(self, text="Номер машины")
        label_nomber_car_driver.place(x=80, y=30)

        label_entry_FIO = tk.Label(self, text="ФИО водителя")
        label_entry_FIO.place(x=80, y=60)

        label_entry_nomber_car_arrest = tk.Label(self, text="Номер эвак. машины")
        label_entry_nomber_car_arrest.place(x=55, y=90)

        label_entry_adress_arest = tk.Label(self, text="Место эвакуации")
        label_entry_adress_arest.place(x=80, y=120)

        label_entry_jail_adress = tk.Label(self, text="Место доставки")
        label_entry_jail_adress.place(x=80, y=150)

        label_entry_Data = tk.Label(self, text="Дата эвакуации")
        label_entry_Data.place(x=80, y=180)

        self.entry_nomber_car_driver = ttk.Entry(self)
        self.entry_nomber_car_driver.place(x=180, y=30)

        self.entry_FIO = ttk.Entry(self)
        self.entry_FIO.place(x=180, y=60)

        self.entry_nomber_car_arrest = ttk.Entry(self)
        self.entry_nomber_car_arrest.place(x=180, y=90)

        self.entry_adress_arest = ttk.Entry(self)
        self.entry_adress_arest.place(x=180, y=120)

        self.entry_jail_adress = ttk.Entry(self)
        self.entry_jail_adress.place(x=180, y=150)

        self.entry_Data = ttk.Entry(self)
        self.entry_Data.place(x=180, y=180)

        btn_cansel = ttk.Button(self, text="Закрыть", command=self.destroy)
        btn_cansel.place(x=240, y=250)

        btn_add = ttk.Button(self, text="Добавить", command=lambda: [self.dob_Prot(), self.Zapis_PROT()])
        btn_add.place(x=70, y=250)

        self.grab_set()
        self.focus_set()


    def dob_Prot(self):  #Добавление
        self.Treeview.insert('', "end", iid=self.iid,
                             values=(self.id, self.entry_nomber_car_driver.get(), self.entry_FIO.get(),
                                     self.entry_nomber_car_arrest.get(), self.entry_adress_arest.get(),
                                     self.entry_jail_adress.get(), self.entry_Data.get()))
        self.iid = self.iid + 1
        self.id = self.id + 1

    def Del_Prot(self):  #Удаление
        row_id = int(self.tree.focus())

        self.Treeview.delete(row_id)

    def Zapis_PROT(self):  # Те же попытки
        file = open("Zaiavki.data","w")
        file.write(str(self.id))
        file.write(str(self.entry_nomber_car_driver.get()))
        file.write(str(self.entry_FIO.get()))
        file.write(str(self.entry_nomber_car_arrest.get()))
        file.write(str(self.entry_adress_arest.get()))
        file.write(str(self.entry_jail_adress.get()))
        file.write(str(self.entry_Data))
        self.entry_nomber_car_driver.delete(0, "end")
        self.entry_FIO.delete(0, "end")
        self.entry_nomber_car_arrest.delete(0, "end")
        self.entry_adress_arest.delete(0, "end")
        self.entry_jail_adress.delete(0, "end")
        self.entry_Data.delete(0, "end")


class Admin(tk.Toplevel):  #Кнопка Админ
    def __init__(self):
        super().__init__()
        self.init_Admin()

    def open_dialog4(self):
        Protocol()

    def open_dialog5(self):
        Sotrudniki()

    @staticmethod
    def open_dialog6():
        ZaiavkiADM()

    def init_Admin(self):
        toolbar1 = tk.Frame(self, bg='#d8d9e9', bd=0)
        toolbar1.pack(side=tk.TOP, fill=tk.X)
        btn_open_dialog4 = tk.Button(toolbar1, text="Протокол эвакуации", command=lambda: self.open_dialog4(),
                                     bg="#d7d8e0", bd=0, compound=tk.LEFT)
        btn_open_dialog4.pack(side=tk.TOP)
        btn_open_dialog5 = tk.Button(toolbar1, text="Сотрудники", command=lambda: self.open_dialog5(), bg="#d7d8e0",
                                     bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog5.pack(side=tk.TOP)

        btn_open_dialog6 = tk.Button(toolbar1, text="Заявления на эвакуацию", command=lambda: self.open_dialog6(),
                                     bg="#d7d8e0", bd=0,
                                     compound=tk.LEFT)
        btn_open_dialog6.pack(side=tk.TOP)


if __name__ == "__main__":
    root = tk.Tk()
    app = Main(root)
    app.pack(side=tk.TOP, fill=tk.X)
    root.title("Эвакуаторное агенство")
    root.geometry("450x250+100+200")
    root.resizable(False, False)
    root.mainloop()

Ответы (1 шт):

Автор решения: Данила Марковский

Вот то, что нужно было сделать. Данный код читает информацию из .csv файла и отображает ее в таблице:

with open("Название вашего файла.расширение", newline="") as f:
    for Название in csv.reader(f):
        self.tree.insert("", tk.END, values=Название)
self.tree.bind("TreeviewSelect")
→ Ссылка