Python,tkinter проблема в работе приложения
Здравствуйте уважаемые программисты. Возникла ошибка при которой программа перестала работать Описываю изменения после которых перестала работать программа.. Подключил библиотеку SQLLite 3, расписал код при котором введенные данные(данные вводяться в окно ввода данных("Добавить") заносяться в таблицу и базу данных). После этих изменений программа перестала запускаться(выдает в консоли ошибку) Я полный профан в программировании по этому не могу сказать точно в чем ошибка,просто скопируйте мой код и посмотрите что не так,я уже просто второй день не могу понять что тут не так.. а сроки уже поджимают,буду очень благодарен за помощь) Очень сильно прошу вам помочь,желательно было бы проверить так же(если ошибку сможете устранить) вносяться ли данные в базу данных.
Так же вот выводимая информация из консоли:
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Users\XX10\AppData\Local\Programs\Python\Python39\lib\tkinter\__init__.py", line 1885, in __call__
return self.func(*args)
File "C:\Users\XX10\PycharmProjects\untitled7\venv\kuhk.py", line 251, in <lambda>
btn_open_dialog4 = tk.Button(toolbar1, text="Протокол эвакуации", command=lambda: self.open_dialog4(), bg="#d7d8e0", bd=0,
File "C:\Users\XX10\PycharmProjects\untitled7\venv\kuhk.py", line 239, in open_dialog4
Protocol()
File "C:\Users\XX10\PycharmProjects\untitled7\venv\kuhk.py", line 132, in __init__
self.init_Protocol()
File "C:\Users\XX10\PycharmProjects\untitled7\venv\kuhk.py", line 141, in init_Protocol
db = DB()
File "C:\Users\XX10\PycharmProjects\untitled7\venv\kuhk.py", line 436, in __init__
self.v.execute(
sqlite3.OperationalError: near ")": syntax error
Я немного потестировал свой код и понял что ошибку выдает даже на рабочую версию приложения(сделал откат кода до того момента когда он запускался), и на консоли указывается все те же самые ошибки,я создал новый проект перенес работающий раньше код и все тоже самое.. Новый код(на который ожидается помощь с починкой окон):
import sqlite3
import tkinter as tk
from tkinter import ttk
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)
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)
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.init_Sotrudniki()
def open_dialog8(self):
Dobavlenie_Sotrudnika()
def init_Sotrudniki(self):
self.title("Сотрудники")
self.geometry("600x420+400+300")
self.resizable(False, False)
db = DB()
self.db = db
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.open_dialog8(),
bg="#d7d8e0", bd=0,
compound=tk.LEFT)
btn_open_dialog8.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()
def records2(self,FIO_driver,entry_nomber_ud,entry_nomber_pass,entry_entry_age_jobs):
self.db.insert_Protocol(FIO_driver,entry_nomber_ud,entry_nomber_pass,entry_entry_age_jobs)
def viev_records2(self):
self.db.c.execute("""SELECT * FROM ivacuator""")
[self.tree.delete(i) for i in self.tree.get_children()]
[self.tree.insert("","end",)]
class ZaiavkiADM(tk.Toplevel):
def __init__(self):
super().__init__(root)
self.init_ZaiavkiADM()
def init_ZaiavkiADM(self):
self.title("Заявления на эвакуацию")
self.geometry("797x420+400+300")
self.resizable(False, False)
db = DB()
self.db = db
self.grab_set()
self.focus_set()
self.tree = ttk.Treeview(self, columns=("ID", "FIO driver", "nomber ud", "nomber pass", "nomber car","Data",
"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("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("Vid", text="Вид заявления")
self.tree.pack()
def records3(self,FIO_driver,entry_ud,entry_pass,entry_nomder_car):
self.db.insert_Zaiavki(FIO_driver,entry_ud,entry_pass,entry_nomder_car)
def records4(self,FIO_driver,entry_ud,entry_pass,entry_nomder_car):
self.db.insert_Zaiavki(FIO_driver,entry_ud,entry_pass,entry_nomder_car)
class Protocol(tk.Toplevel):
def __init__(self):
super().__init__()
self.init_Protocol()
def open_dialog7(self):
Dobavlenie_Protocol()
def init_Protocol(self):
self.title("Протокол")
self.geometry("900x420+400+300")
self.resizable(True, True)
db = DB()
self.db = db
'''self.entry_description = ttk.Entry(self)
self.entry_description.place(x=400, y=50)''' "Добавление записи"
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.open_dialog7(),
bg="#d7d8e0", bd=0,
compound=tk.LEFT)
btn_open_dialog7.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()
def records1(self,nomber_car_driver,entry_FIO,entry_nomber_car_arrest,entry_adress_arest,entry_jail_adress):
self.db.insert_Protocol(nomber_car_driver,entry_FIO,entry_nomber_car_arrest,entry_adress_arest,entry_jail_adress)
class ZaiavkaGAI(tk.Toplevel):
def __init__(self):
super().__init__(root)
self.init_ZaiavkaGAI()
def init_ZaiavkaGAI(self):
self.title("Заполнить заявку ГАИ")
self.geometry("400x320+400+300")
self.resizable(False, False)
self.view = app
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)
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)
btn_cansel = ttk.Button(self, text="Закрыть", command=self.destroy)
btn_cansel.place(x=240, y=250)
btn_add = ttk.Button(self, text="Добавить")
btn_add.place(x=70, y=250)
btn_add.bind("<button-1>", lambda event: self.view.records3(self.FIO_driver,self.entry_ud,self.entry_pass,
self.entry_nomder_car))
self.grab_set()
self.focus_set()
class Admin(tk.Toplevel):
def __init__(self):
super().__init__()
self.init_Admin()
def open_dialog4(self):
Protocol()
def open_dialog5(self):
Sotrudniki()
def open_dialog6(self):
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)
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)
self.view = app
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)
self.FIO_driver = ttk.Entry(self)
self.FIO_driver.place(x=180, y=30)
self.entry_ud = ttk.Entry(self)
self.entry_ud.place(x=180, y=60)
self.entry_pass = ttk.Entry(self)
self.entry_pass.place(x=180, y=90)
self.entry_nomder_car = ttk.Entry(self)
self.entry_nomder_car.place(x=180, y=120)
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="Добавить")
btn_add.place(x=70, y=250)
btn_add.bind("<button-1>", lambda event: self.view.records4(self.entry_FIO_driver,self.entry_ud,self.entry_pass,
self.entry_nomder_car))
class Dobavlenie_Protocol(tk.Toplevel):
def __init__(self):
super().__init__()
self.init_Dobavlenie_Protocol()
def init_Dobavlenie_Protocol(self):
self.title("Заполнить протокол")
self.geometry("400x320+400+300")
self.resizable(False, False)
self.view = app
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="Добавить")
btn_add.place(x=70, y=250)
btn_add.bind("<button-1>",lambda event: self.view.records1(self.entry_nomber_car_driver,self.entry_FIO,
self.entry_nomber_car_arrest,self.entry_adress_arest,
self.entry_jail_adress,self.entry_Data))
self.grab_set()
self.focus_set()
class Dobavlenie_Sotrudnika(tk.Toplevel):
def __init__(self):
super().__init__()
self.init_Dobavlenie_Sotrudnika()
def init_Dobavlenie_Sotrudnika(self):
self.title("Добавить сотрудника")
self.geometry("400x320+400+300")
self.resizable(False, False)
self.view = app
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="Добавить")
btn_add.place(x=70, y=250)
btn_add.bind("<button-1>", lambda event: self.view.records1(self.FIO_driver,self.entry_nomber_ud,
self.entry_nomber_pass,
self.entry_entry_age_jobs))
self.grab_set()
self.focus_set()
class DB:
def __init__(self):
self.conn = sqlite3.connect("ivacuator.db")
self.c = self.conn.cursor()
self.c.execute(
"""CREATE TABLE IF NOT EXISTS Sotrudniki (id integer primary key,FIO_driver text,entry_nomber_ud blob,
entry_nomber_pass blob,entry_entry_age_jobs integer)""")
self.conn.commit()
self.v = self.conn.cursor()
self.v.execute(
"""CREATE TABLE IF NOT EXISTS Protocol (id integer primary key,entry_FIO text,
entry_nomber_car_arrest blob,entry_adress_arest blob, entry_jail_adress blob,)""")
self.conn.commit()
self.b = self.conn.cursor()
self.b.execute(
"""CREATE TABLE IF NOT EXISTS Zaiavki (id integer primary key,FIO_driver text,entry_ud blob,
entry_pass blob, entry_nomder_car blob)""")
self.conn.commit()
def insert_Protocol(self,nomber_car_driver,entry_FIO,entry_nomber_car_arrest,entry_adress_arest,entry_jail_adress):
self.v.execute("""INSERT INTO ivacuator(nomber_car_driver,entry_FIO,entry_nomber_car_arrest,entry_adress_arest
entry_jail_adress) VALUES (?,?,?,?,?)""",(nomber_car_driver,entry_FIO,entry_nomber_car_arrest,
entry_adress_arest,entry_jail_adress))
self.conn.commit()
def insert_Sotrudniki(self,FIO_driver,entry_nomber_ud,entry_nomber_pass,entry_entry_age_jobs):
self.c.execute("""INSERT INTO ivacuator(FIO_driver,entry_nomber_ud,entry_nomber_pass,entry_entry_age_jobs)VALUES(?,?,?,?)""",
(FIO_driver,entry_nomber_ud,entry_nomber_pass,entry_entry_age_jobs))
self.conn.commit()
def insert_Zaiavki(self,FIO_driver,entry_ud,entry_pass,entry_nomder_car):
self.b.execute("""INSERT INTO ivacuator(FIO_driver,entry_ud,entry_pass,entry_nomder_car)VALUES(?,?,?,?)""",
(FIO_driver,entry_ud,entry_pass,entry_nomder_car))
self.conn.commit()
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()