Графический интерфейс Tkinter имеет входные данные, однако база данных пуста, когда я добавляю переменные в

Я создаю систему организации автозапчастей и в рамках программы добавляю раздел с информацией о клиентах. Этот раздел раньше работал, однако теперь я добавил главное меню и программа ничего не добавляет в базу кроме трех {},{},{} когда должны быть данные

Я пытался изменить имена переменных и использовать глобальные переменные, но все равно получаю те же ошибки.

from tkinter import *
import DATABASE1

def get_selected_row(event):
    global selected_tuple
    index = listbox.curselection()[0]
    selected_tuple=listbox.get(index)
    Entry1.delete(0,END)
    Entry1.insert(END,selected_tuple[1])
    Entry2.delete(0,END)
    Entry2.insert(END,selected_tuple[2])
    Entry3.delete(0,END)
    Entry3.insert(END,selected_tuple[3])

def View_Command():
    listbox.delete(0,END)
    for row in DATABASE1.View():
        listbox.insert(END,row)

def Add_Command():
    DATABASE1.Insert(FirstName.get(),LastName.get(),PhoneNum.get())
    listbox.delete(0,END)
    listbox.insert(END,(FirstName.get(),LastName.get(),PhoneNum.get()))
    View_Command()

def Delete_Command():
    DATABASE1.Delete((selected_tuple[0]))
    View_Command()

def Update_Command():

DATABASE1.Update(selected_tuple[0],FirstName.get(),LastName.get(),PhoneNum.get()) View_Command()

def OpenCustomerInfo():
    global listbox
    global FirstName
    global LastName
    global PhoneNum
    global index
    global Entry1
    global Entry2
    global Entry3
    global scroll

    CustomerInfo = Tk()
    CustomerInfo.title("Customer Information")
    CustomerInfo.iconbitmap(r'favicon.ico')

    Label1 = Label(CustomerInfo,text = "Customer Forename")
    Label1.grid(row = 0, column = 0)

    Label2 = Label(CustomerInfo,text = "Customer Surname")
    Label2.grid(row = 1, column = 0)

    Label3 = Label(CustomerInfo,text = "Phone Number")
    Label3.grid(row = 2, column = 0)

    FirstName = StringVar()
    Entry1 = Entry(CustomerInfo,textvariable=FirstName)
    Entry1.grid(row = 0, column = 1)

    LastName = StringVar()
    Entry2 = Entry(CustomerInfo,textvariable=LastName)
    Entry2.grid(row = 1, column = 1)

    PhoneNum = StringVar()
    Entry3 = Entry(CustomerInfo,textvariable=PhoneNum)
    Entry3.grid(row = 2, column = 1)

    listbox = Listbox(CustomerInfo, height=20,width=50)
    listbox.grid(row = 0, column = 4, rowspan = 6, columnspan = 2)

    scroll=Scrollbar(CustomerInfo)
    scroll.grid(row = 0, column = 2, sticky = NS, rowspan=8)

    listbox.configure(yscrollcommand=scroll.set)
    scroll.configure(command=Listbox.yview)

    listbox.bind('<<ListboxSelect>>',get_selected_row)

    b1 = Button(CustomerInfo, text = "Add To Database", width = 17, command = Add_Command)
    b1.grid(row = 3, column = 0, sticky = S)

    b2 = Button(CustomerInfo, text = "Delete From Database", width = 17, command = Delete_Command)
    b2.grid(row = 4, column = 0, sticky = N)

    b3 = Button(CustomerInfo, text = "Update Database", width = 17, command = Update_Command)
    b3.grid(row = 3, column = 1, sticky = S)

    b4 = Button(CustomerInfo, text = "View Database", width = 17, command = View_Command)
    b4.grid(row = 4, column = 1, sticky = N)

def MainMenu():
    MainMenu = Tk()
    MainMenu.title("Main Menu")
    Label1 = Label(MainMenu, text = "Main Menu")
    Label1.grid(row = 0, column = 0)
    Button1 = Button(MainMenu, text = "Open Customer Information Page",command = OpenCustomerInfo)
    Button1.grid(row = 1, column = 0)

MainMenu()

А это мой файл базы данных.

import sqlite3

def Connect():
    connection = sqlite3.connect("Customers.db")
    cursor = connection.cursor()
    cursor.execute("CREATE TABLE IF NOT EXISTS Customers (ID INTEGER PRIMARY KEY, FIRSTNAME VARCHAR(15), LASTNAME VARCHAR(15), PHONENUM INTEGER)")
    connection.commit()
    connection.close()

def Insert(FIRSTNAME,LASTNAME,PHONENUM):
    connection = sqlite3.connect("Customers.db")
    cursor = connection.cursor()
    cursor.execute("INSERT INTO Customers VALUES(NULL,?,?,?)",(FIRSTNAME,LASTNAME,PHONENUM,))
    connection.commit()
    connection.close()
    View()

def View():
    connection = sqlite3.connect("Customers.db")
    cursor = connection.cursor()
    cursor.execute("SELECT * FROM Customers")
    row = cursor.fetchall()
    connection.close()
    return row

def Delete(ID):
    connection = sqlite3.connect("Customers.db")
    cursor = connection.cursor()
    cursor.execute("DELETE FROM Customers WHERE ID=?",(ID,))
    connection.commit()
    connection.close()

def Update(ID,FIRSTNAME,LASTNAME,PHONENUM):
    connection = sqlite3.connect("Customers.db")
    cursor = connection.cursor()
    cursor.execute("UPDATE Customers SET FIRSTNAME = ? , LASTNAME = ? , PHONENUM = ? WHERE ID = ?",(FIRSTNAME,LASTNAME,PHONENUM,ID))    
    connection.commit()
    connection.close()

Connect()

Когда ввод берется из полей ввода в графическом интерфейсе, он должен добавить данные в базу данных, а затем показать обновленную базу данных, но вместо этого добавляет три пустых элемента, например {}, {}, {}

Это слишком много кода для вопроса. Не могли бы вы попытаться сократить его до минимальный воспроизводимый пример? Кроме того, проверили ли вы, что ваши переменные содержат ожидаемые данные непосредственно перед записью в базу данных?

Bryan Oakley 30.01.2019 15:21

Вы, вероятно, запутались, используя global. Чтение Это плохая практика программирования в tkinter? по шаблону Альтернатива основному методу класса

stovfl 30.01.2019 15:46

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

Jack Ibbotson 13.02.2019 15:09
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
67
0

Другие вопросы по теме