Я не могу вставить значения в базу данных с помощью функции .get () - PullRequest
0 голосов
/ 20 мая 2019

Я создаю таблицу в базе данных, и мне нужно вставить значения, введенные в запись в базе данных.Я пробую разные вещи с недели.Я новичокМожет кто-нибудь найти ошибку?

Я перепробовал все виды вещей, используя переменную и вставляя значения напрямую, используя .get (), а также используя?заполнитель.

from tkinter import*
import sqlite3

conn = sqlite3.connect("database.db")
cu = conn.cursor()
cu.execute("""CREATE TABLE IF NOT EXISTS student(
             ID PRIMARY KEY NOT NULL,
             DATE TEXT NOT NULL,
             ADDRESS TEXT NOT NULL,
             MOBILE NUMBER REAL NOT NULL,
             NAME TEXT NOT NULL,
             QUALIFICATION TEXT NOT NULL,
             EMAIL TEXT NOT NULL,
             GENDER TEXT NOT NULL
             )""")
conn.commit()
print("Student Table successfully created ")
cu.execute("""CREATE TABLE IF NOT EXISTS employee(
             ID PRIMARY KEY NOT NULL,
             DATE TEXT NOT NULL,
             ADDRESS TEXT NOT NULL,
             MOBILE NUMBER REAL NOT NULL,
             NAME TEXT NOT NULL,
             QUALIFICATION TEXT NOT NULL,
             EMAIL TEXT NOT NULL,
             GENDER TEXT NOT NULL
             )""")
conn.commit()
conn.close()
print("Employee Table successfully created ")


def stud_win():
    studwin=Toplevel(root)
    studwin.title('Student registration')
    studwin.resizable(0,0)
    a = Label(studwin ,text = "ID" ).grid(row = 0,column = 0)
    b = Label(studwin ,text = "Date").grid(row = 1,column = 0)
    c = Label(studwin ,text = "Address").grid(row = 2,column = 0)
    d = Label(studwin ,text = "Mobile Number").grid(row = 3,column = 0)
    e = Label(studwin, text = "Name").grid(row=0, column=2)
    f = Label(studwin, text = "Qualification").grid(row=1, column=2)
    g = Label(studwin ,text = "Email").grid(row = 2,column = 2)
    h = Label(studwin, text = "Gender").grid(row = 3, column= 2)
    ID=IntVar
    a1 = Entry(studwin, textvariable=ID).grid(row = 0,column = 1)
    Date = StringVar
    b1 = Entry(studwin, textvariable=Date).grid(row = 1,column = 1)
    Address = StringVar
    c1 = Entry(studwin,textvariable=Address).grid(row = 2,column = 1)
    Number = StringVar
    d1 = Entry(studwin,textvariable=Number).grid(row = 3,column = 1)
    Name = StringVar
    e1 = Entry(studwin,textvariable=Name).grid(row = 0,column = 3)
    Qualification = StringVar
    f1 = Entry(studwin,textvariable=Qualification).grid(row = 1,column = 3)
    Email = StringVar
    g1 = Entry(studwin,textvariable=Email).grid(row = 2,column = 3)
    gender = StringVar()
    R1 = Radiobutton(studwin, text="Male", value="male", var=gender)
    R2 = Radiobutton(studwin, text="Female", value="female", var=gender)
    R1.grid(row = 3,column = 3)
    R2.grid(row = 3,column = 4)


    def btn_click1():
        ID = ID.get()
        Date =  Date.get()
        Address = Address.get()
        Number = Number.get()
        Name = Name.get()
        Qualification= Qualification.get()
        Email = Email.get()
        gender = gender.get()
        conn = sqlite3.connect('database.db')
        cu=conn.cursor()
        cu.execute('INSERT INTO student (ID,Date,Address,Number,Name,Qualification,Email,gender) VALUES(?,?,?,?,?,?,?,?)',
                       (ID, Date, Address, Number, Name,Qualification,Email,gender,))
        conn.commit()
    i = Button(studwin, text="submit", command=btn_click1).grid(row=4, columnspan=4)
    studwin.mainloop()

root=Tk()
root.title("Registration form")
root.resizable(0,0)
menubar=Menu(root)
filemenu = Menu(menubar, tearoff=0)
filemenu.add_command(label="Student", command=stud_win)
filemenu.add_command(label="Employee")
menubar.add_cascade(label="Register", menu=filemenu)
form_menu = Menu(menubar, tearoff=0)
form_menu.add_command(label="Enrollment form")
menubar.add_cascade(label="Transaction", menu=form_menu)
exitmenu=Menu(menubar, tearoff=0)
exitmenu.add_command(label="Exit App", command=root.quit)
menubar.add_cascade(label="Exit", menu=exitmenu)    
root.config(menu=menubar)
root.mainloop()

Ошибка

Исключение при обратном вызове Tkinter (последний вызов последнего): Файл "F: \ Python3 \ lib \ tkinter__init__.py ", строка 1705, в вызов return self.func (* args) Файл" F: / Python Projects / Registration form.py ", строка 71, в btn_click1 ID = ID.get () UnboundLocalError:локальная переменная 'ID', указанная перед присваиванием

1 Ответ

0 голосов
/ 20 мая 2019

ID = ID.get() не будет работать, потому что ID - это локальная переменная, определенная в stud_win(), что означает, что вы не можете получить к ней доступ извне. Вы пытаетесь получить к нему доступ из btn_click1(), что вызывает исключение.

Чтобы исправить это, вы должны сделать его глобальной переменной. То же самое относится ко всем переменным, определенным в btn_click1()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...