将sqlite3与Tkinter链接

时间:2015-03-15 20:11:03

标签: python sql sqlite tkinter

作为我正在制作的库存系统的一部分,我希望Tkinter通过用户输入输入框并点击“添加股票”来收集我希望插入数据库的数据值。按钮。

我的问题是,我并不完全确定如何将sqlite3与Tkinter代码结合起来。

以下是我的Tkinter代码,用于添加股票'窗口

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()

以下是我希望与Tkinter代码链接的sqlite3的insert语句。

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)

我已经定义了子例程中引用的表,但是我很难找到通过Tkinter将数据插入到这些表中的方法。

我正在为那些想知道的人运行Python 3.4。帮助将受到高度赞赏。

2 个答案:

答案 0 :(得分:1)

解决此问题的常用方法是让按钮调用专门用于该按钮的功能。该函数的职责是从GUI收集数据,调用一些使用数据的函数,然后将任何结果发布回GUI。

例如:

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

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

以上内容不适用于您发布的代码,但它提供了一般的想法。它不适用于您发布的代码的一个原因是因为entry1等都是局部变量。您应该使用更面向对象的方法,因此这些变量都是类的所有属性。您可以查看Best way to structure a tkinter application的答案作为示例。

答案 1 :(得分:0)

一个技巧是使用' 命令'在你的按钮。如上面评论中所列,请尝试使用以下方法:

def _add_to_db:     get_data = entry.get()#这应该是Entry中的文本     insert = *用于将数据插入数据库的一些代码以及\ n中的 get_data        为了存在于您的数据库中*

btn = Button(root, text="Place in DB", command=_add_to_db).pack()