Использование GET в Tkinter для SQL

#python #sql #tkinter

#python #sql #tkinter

Вопрос:

Я пытаюсь создать простую программу, которая позволяет пользователю вводить имя, отчество и фамилию в графическом интерфейсе tkinter. Когда пользователь нажимает кнопку «Сохранить», программа записывает записи из графического интерфейса пользователя в базу данных.

У меня возникли некоторые проблемы с использованием «Get» с tkinter. Мой код вставляет пустые строки в мою базу данных

 import tkinter as tk
import sqlite3 as sl


con = sl.connect('nibbles.db')

def save_employee():

    sql = 'INSERT INTO EMPLOYEE (FIRST_NAME, MIDDLE_INITIAL, LAST_NAME) values(?, ?, ?)'
    data = [
        (firsNameEnt.get(), middleInitEnt.get(), lastNameEnt.get())
        ]
    with con:
        con.executemany(sql, data)


#Create Window for Employee Entry
window = tk.Tk()
window.title("Add New Employee")
window.columnconfigure([0,1,2,3,4,5],weight=1)
window.rowconfigure([0,1,2,3,4,5],weight=1)



firstNameLbl = tk.Label(text="First Name")
firstNameLbl.grid(row = 0, column = 0, padx=5, pady=5)
firsNameEnt = tk.Entry()
firsNameEnt.grid(row = 0, column = 1, padx=5, pady=5)

middleInitLbl = tk.Label(text = "Middle Initial")
middleInitLbl.grid(row = 0, column = 2, padx=5, pady=5)
middleInitEnt = tk.Entry()
middleInitEnt.grid(row = 0, column = 3, padx=5, pady=5)

lastNameLbl = tk.Label(text = "Last Name")
lastNameLbl.grid(row = 0, column = 4, padx=5, pady=5)
lastNameEnt = tk.Entry()
lastNameEnt.grid(row = 0, column = 5, padx=5, pady=5)

saveBtn = tk.Button(text="Save", command=save_employee())
saveBtn.grid(row = 1, column = 5, padx=5, pady=5,sticky = "se")

window.mainloop()
 

Комментарии:

1. Обновление, я выяснил, что моя функция save_employee выполняется независимо от нажатия кнопки сохранения, что объясняет, почему мои переменные пусты… но я все еще пытаюсь понять, почему это происходит

Ответ №1:

 #Change command=save_employee() by command=save_employee.
#If one day you need to pass parameters 
#command=lambda : save_employee(arg)

    import tkinter as tk
    import sqlite3 as sl
    
    
    con = sl.connect('nibbles.db')
    
    def save_employee():
        print(firsNameEnt.get(), middleInitEnt.get(), lastNameEnt.get())#)
    
    
    
    #Create Window for Employee Entry
    window = tk.Tk()
    window.title("Add New Employee")
    window.columnconfigure([0,1,2,3,4,5],weight=1)
    window.rowconfigure([0,1,2,3,4,5],weight=1)
    
    
    
    firstNameLbl = tk.Label(text="First Name")
    firstNameLbl.grid(row = 0, column = 0, padx=5, pady=5)
    firsNameEnt = tk.Entry()
    firsNameEnt.grid(row = 0, column = 1, padx=5, pady=5)
    
    middleInitLbl = tk.Label(text = "Middle Initial")
    middleInitLbl.grid(row = 0, column = 2, padx=5, pady=5)
    middleInitEnt = tk.Entry()
    middleInitEnt.grid(row = 0, column = 3, padx=5, pady=5)
    
    lastNameLbl = tk.Label(text = "Last Name")
    lastNameLbl.grid(row = 0, column = 4, padx=5, pady=5)
    lastNameEnt = tk.Entry()
    lastNameEnt.grid(row = 0, column = 5, padx=5, pady=5)
    
    saveBtn = tk.Button(text="Save", command=save_employee)
    saveBtn.grid(row = 1, column = 5, padx=5, pady=5,sticky = "se")
    
    window.mainloop()''
 

Комментарии:

1. Я рекомендую вам не использовать Tkinter xd