Здравствуйте!
Есть пользовательское окно Tkinter. Всё, что я ввёл в этом окне записывается в переменные (должно записываться). Эти переменные далее выводятся принтом без ошибки. Проблема возникает, когда я хочу переместить эти значения в таблицу sqlite3. Вот код:
import sqlite3
from tkinter import * #Импортируем графический фреймворк
from tkinter import ttk
from tkinter import messagebox
import time
import pandas as pd
def ent ():
try:
garent = garnum.get()
gbd = sqlite3.connect('mydatabase.db')
gbdcur = gbd.cursor()
print('Итак, законектились...')
n = garnum.get()
gbdcur.execute(f"SELECT [Тип ТС] FROM garpark WHERE [Гаражный номер] = {n}")
gbd_id = gbdcur.fetchone()
print(gbd_id)
gbdcur.execute(f"SELECT [Модель] FROM garpark WHERE [Гаражный номер] = {n}")
model_id = gbdcur.fetchone()
print(model_id)
gbdcur.execute(f"SELECT [Гос. рег. знак] FROM garpark WHERE [Гаражный номер] = {n}")
gosnumber_id = gbdcur.fetchone()
print(gosnumber_id)
gbdcur.execute(f"SELECT [ДЭУ] FROM garpark WHERE [Гаражный номер] = {n}")
dau_id = gbdcur.fetchone()
print(dau_id)
vidts_lbl_id = Label(fra, text=gbd_id, fg = 'red', font = 'Arial 12 bold' )
vidts_lbl_id.place(x=100, y=2)
model_lbl_id = Label(fra, text=model_id, fg = 'red', font = 'Arial 12 bold' )
model_lbl_id.place(x=100, y=28)
gosnumber_lbl_id = Label(fra, text=gosnumber_id, fg = 'red', font = 'Arial 12 bold' )
gosnumber_lbl_id.place(x=100, y=56)
dau_lbl_id = Label(fra, text=dau_id, fg = 'red', font = 'Arial 12 bold' )
dau_lbl_id.place(x=100, y=84)
except sqlite3.Error as error:
print('Кое-что пошло не так: ', error)
finally:
gbd.close()
print('База закрыта')
#РАБОТА ЭТОЙ ФУНКЦИИ МЕНЯ ПОДВОДИТ!
def app ():
try:
test = sqlite3.connect('mydatabase.db') # коннектимся с БД
cursor = test.cursor()
g = garnum.get() # переменная для значений из поля Entry в окне
#Далее я получаю значения нужных мне ячеек из таблицы БД. (Заношу я, в другую таблицу)
cursor.execute(f"SELECT [Тип ТС] FROM garpark WHERE [Гаражный номер] = {g}")
gbd_in = cursor.fetchone()
print(gbd_in)
cursor.execute(f"SELECT [Модель] FROM garpark WHERE [Гаражный номер] = {g}")
model_in = cursor.fetchone()
print(model_in)
cursor.execute(f"SELECT [Гос. рег. знак] FROM garpark WHERE [Гаражный номер] = {g}")
gosnumber_in = cursor.fetchone()
print(gosnumber_in)
cursor.execute(f"SELECT [ДЭУ] FROM garpark WHERE [Гаражный номер] = {g}")
dau_in = cursor.fetchone()
print(dau_in)
com = combo1.get() #Опциональные комбобоксы, присутствуют в польз. окне
com2= combo2.get()
descvin = descv.get(1.0,END) #Переменная, которая сохраняет значение виджета Text
print(descv)
#Далее идёт проверка в терминале, работают ли мои переменные
lang_list = [(g),
(gbd_in),
(model_in),
(gosnumber_in),
(dau_in),
(com),
(com2),
(descv)]
print(lang_list) #Так вот, работают....
#Далее я создаю нужную мне таблицу, куда я буду вводить значения
cursor.execute('''CREATE TABLE IF NOT EXISTS service_data ([Гаражный номер] INT,
[Вид ТС] TEXT,
[Модель ТС] TEXT,
[Гос. рег. знак] TEXT,
[ДЭУ] TEXT,
[Вид обслуживания] TEXT,
[Категория обслуживания] TEXT
[Описание] TEXT)''')
# Вся проблема здесь. Не могу передать значения.
cursor.execute('INSERT INTO service_data VALUES(?,?,?,?,?,?,?,?)', (g, gbd_in,model_in,gosnumber_in,dau_in,com,com2,descv,))
test.commit()
except sqlite3.Error as error:
print('Произошла ошибка', error)
finally:
test.close()
print('База данных закрыта')
window_entry = Tk() # Тут блок пользовательского окна.
window_entry.title('ЗАЯВКА НА ОБСЛУЖИВАНИЕ')
window_entry ['bg'] = '#CDC9C9'
window_entry.wm_attributes('-alpha', 0.90)
window_entry.geometry('500x400')
meny = Menu(window_entry)
window_entry.config(menu = meny)
fm = Menu(meny)
meny.add_cascade(label='Обслуживание', menu=fm)
fm.add_command(label='Заявка на ремонт/ТО')
fm.add_command(label='Шины')
fm.add_command(label='Аккумуляторы')
descv = StringVar()
written = StringVar()
written2 = StringVar()
written3 = StringVar()
garnum = Entry(textvariable=written, width = 4, font = ('Arial', '20', 'bold')) # Собственно, сами поля ввода...
garnum.place(x=10 , y= 30)
combo1 = ttk.Combobox(font = 'times 12', width = 17, values= ['РЕМОНТ',
'TO'])
combo1.grid(column=0, row=0)
combo1.place(x=330,y=10)
#combo1.current(0)
combo2 = ttk.Combobox(font = 'times 12', width = 17, values= ['АКБ',
"Гидравлическая система",
"Система двигателя",
"Долив технических жидкостей",
"Дополнительное оборудование",
"Коробка переключения передач",
"Система охлаждения",
"Рулевая система",
"Сварочные работы",
"Сцепление",
"Топливная система",
"Тормозная система",
"Трансмиссия",
"Фары",
"Ходовая система",
"Шины",
"Электрика",
"Прочее"])
combo2.place(x=330,y=60)
combo3 = ttk.Combobox(font = 'times 12', width = 17, values=['ТО-0 км',
"ТО-0 мч",
"ТО-0 (об) мч",
"ТО-1 км",
"ТО-1 мч",
"ТО-1 (об) мч",
"ТО-2 км",
"ТО-2 мч",
"ТО-2 (об) мч",
"ТО-3 км",
"ТО-3 мч",
"ТО-3 (об) мч",
"ТО мч",
"ТО сезон"])
combo3.place(x=330,y=100)
gar_num_label= Label(text = 'Гар. №', fg = 'black', font = 'Arial 10')
gar_num_label.place(x=10, y=5)
type_of_service = Label(text = 'Вид обслуживания', fg = 'black', font = 'Arial 10')
type_of_service.place(x=200, y=10)
service_category= Label(text = 'Категория обслуживания', fg = 'black', font = 'Arial 10')
service_category.place(x=160, y=60)
description_lbl= Label(text = 'Описание неисправности', fg = 'black', font = 'Arial 10')
description_lbl.place(x=40, y=120)
description = Text( width =53, height = 5, bg = 'black', fg = 'white', wrap= WORD, textvariable=descv)
description.place(x=40, y= 150)
fra = Frame(window_entry, width=495, height=105, bg= '#708090')
fra.place(x=1,y=240)
vidts_lbl = Label(fra, text= 'Вид ТС: ')
vidts_lbl.place(x=2, y=2)
model_lbl = Label(fra, text= 'Модель ТС: ')
model_lbl.place(x=2, y=28)
state_number = Label(fra, text= 'Гос. рег. знак : ')
state_number.place(x=2, y=56)
deu_lbl = Label(fra, text= 'ДЭУ: ')
deu_lbl.place(x=2, y=84)
button_app = Button(text = 'Сохранить', width= '1', height = '1', padx='50', pady ='3', bg = 'green', fg = 'white', font ='times 15', command = app)
button_app.place(x=350,y=350)
button_app1 = Button(text = 'Далее', width= '1', height = '1', padx='50', pady ='3', bg = 'green', fg = 'white', font ='times 10', command = ent)
button_app1.place(x=10,y=70)
window_entry.mainloop()
Что я делаю не так?