1

As a part of an inventory system I am making, I want Tkinter to collect the values of the data I wish to insert into a database through the user typing in entry boxes and clicking an 'Add Stock' button.

My problem is, that, well I'm not entirely sure how to combine sqlite3 with Tkinter code.

Below is my Tkinter code for the 'Add Stock' window

def addStock():
    root = Tk()
    root.title('Add Stock')
    label1 = Label(root, text='Gender')
    label2 = Label(root, text='Price')
    label3 = Label(root, text='Enter Product Name')
    label4 = Label(root, text='Colour')
    label5 = Label(root, text='Size')
    label6 = Label(root, text='Enter Amount')
    label7 = Label(root, text='Source')
    label8 = Label(root, text='Enter ProductID')
    entry1 = Entry(root)
    entry2 = Entry(root)
    entry3 = Entry(root)
    entry4 = Entry(root)
    entry5 = Entry(root)
    entry6 = Entry(root)
    entry7 = Entry(root)
    entry8 = Entry(root)

    label1.grid(row=0, sticky=E)
    label2.grid(row=1, sticky=E)
    label3.grid(row=2, sticky=E)
    label4.grid(row=3, sticky=E)
    label5.grid(row=4, sticky=E)
    label6.grid(row=5, sticky=E)
    label7.grid(row=6, sticky=E)
    label8.grid(row=7, sticky=E)

    entry1.grid(row=0, column=1)
    entry2.grid(row=1, column=1)
    entry3.grid(row=2, column=1)
    entry4.grid(row=3, column=1)
    entry5.grid(row=4, column=1)
    entry6.grid(row=5, column=1)
    entry7.grid(row=6, column=1)
    entry8.grid(row=7, column=1)

    frame3 = Frame(root)
    frame3.grid(columnspan = 2)

    button1 = Button(frame3, padx=10, pady=10, bd=2, text="Add Stock", command=insert_data)
    button1.grid()

Below is my insert statements for sqlite3 that I wish to link with the Tkinter code.

def insert_data(values): 
    with sqlite3.connect("jam_stock.db") as db:
        cursor = db.cursor()
        sql = "insert or ignore into Product (Name, ProductID) values (?,?)"
        query(sql,values)
        db.commit()

def insert_product_type_data(records): #normalised
    sql = "insert into ProductType(AmountInStock, Size, Colour, Source) values (?,?,?,?)"
    for record in records:
        cursor.execute(sql,record)

def insert_product_gender_data(records): #normalised
    sql = "insert into ProductGender(Gender, Price) values (?,?)"
    for record in records:
        cursor.execute(sql, records)

I have already defined the tables referenced in the subroutines, but I'm struggling to find a way to insert data into those tables through Tkinter.

I am running Python 3.4 for those wondering. Help would be highly appreciated.

Ted
  • 19
  • 1
  • 3
  • How do you define "struggle"? Do you get errors? If so, what errors? If you don't get errors, have you verified your code is being called? Is the above code literally your code? Your `insert_data` function requires a parameter, but the button won't be passing any parameters to it. – Bryan Oakley Mar 15 '15 at 21:03
  • No, I am really in the dark about where to start. The Tkinter code works fine, but its trying to link the three `insert` functions to the entry boxes and buttons. At the moment I just have a meaningless GUI. – Ted Mar 15 '15 at 21:26

2 Answers2

1

The normal way to approach this is to have your button call a function specially for that button. The responsibilities of that function are to gather the data from the GUI, call some function that uses the data, and then post any results back to the GUI.

For example:

...
button1 = Button(... text="Add Stock", command=_on_add_stock)
...

def _on_add_stock():
    gender = entry1.get()
    price = entry2.get()
    ...
    insert_data(gender, price, ...)

The above won't work with the code you posted, but it gives the general idea. One reason it won't work with the code you've posted is because entry1, etc are all local variables. It would behoove you to use a more object-oriented approach, so those variables are all attributes of a class. You can see the answers to Best way to structure a tkinter application for examples.

Community
  • 1
  • 1
Bryan Oakley
  • 370,779
  • 53
  • 539
  • 685
0

One trick is using 'command' in your button. As listed in the above comment try using the method:

def _add_to_db: get_data = entry.get()#This should be the text from Entry insert = *some code for inserting data to database plus get_data in \n order to be present in your database*

btn = Button(root, text="Place in DB", command=_add_to_db).pack()
coder
  • 8,346
  • 16
  • 39
  • 53
LeeYawn
  • 21
  • 4