Проблема с id в Treeview
Начну с описания проблемы, есть программа мы воддим значения и они заносяться в таблицу а потом в файл(с id), но при новом запуске программы сохраненные данные остаються в таблице и при добавлении новых у них обнуляеться id. Нужно сделать так что бы id не обнулялся и продолжил нумерацию с последнего id. Код: `
import tkinter as tk
import tkinter.ttk as ttk
from tkinter import ttk
import csv
from turtle import pd
import openpyxl
import pandas
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.Treeview = self.tree
with open("Sotrudniki.csv", newline="") as f:
for Sotrudniki in csv.reader(f):
self.tree.insert("", tk.END, values=Sotrudniki)
self.tree.bind("TreeviewSelect")
self.tree.place()
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.iid = self.iid + 1
self.id = self.id + 1
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()
))
def Del_SOT(self): #Функция удаления
row_id = str(self.tree.focus())
self.Treeview.delete(row_id)
def ZapisSOT(self): #Запись в файл(мои попытки сделать все самому)
file = open("Sotrudniki.csv","a")
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()+ "\n"))
self.FIO_driver.delete(0, "end")
self.entry_nomber_ud.delete(0, "end")
self.entry_nomber_pass.delete(0, "end")
self.entry_entry_age_jobs.delete(0, "end")
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()
with open("Zaiavki.csv", newline="") as f:
for Zaiavki in csv.reader(f):
self.tree.insert("", tk.END, values=Zaiavki)
self.tree.bind("TreeviewSelect")
def Del_ZAI(self): #Удаление заявок
row_id = str(self.tree.focus())
self.tree.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.id1 = 1
self.iid1 = 1
self.grab_set()
self.focus_set()
def ZapisGAI(self): #Мои те же самые попытки все самому сделать
file = open("Zaiavki.csv","a")
file.write(str(self.id1)+ ",")
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)+ "\n")
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")
file.close()
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.Data1 = ttk.Entry(self)
self.Data1.place(x=180, y=180)
self.vid1 = "Частное лицо"
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): # Те же самые попытки
self.iid = 1 + self.iid
self.id = 1 + self.id
file = open("Zaiavki.csv","a")
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.Data1.get() + ","))
file.write(str(self.vid1) + "\n")
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.Data1.delete(0, "end")
self.iid = 1 + self.iid
self.id = 1 + self.id
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", "entry_Data"), 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("entry_Data", 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("entry_Data", text="Дата эвакуации")
self.tree.pack()
self.id = 1
self.iid = 1
self.Treeview = self.tree
with open("Protokol.csv", newline="") as f:
for Protocol in csv.reader(f):
self.tree.insert("", tk.END, values=Protocol)
self.tree.bind("TreeviewSelect")
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 = str(self.tree.focus())
self.Treeview.delete(row_id)
def Zapis_PROT(self): # Те же попытки
file = open("Protokol.csv","a")
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.get() + "\n"))
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")
file.close()
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()
