简体   繁体   English

使用python中tkinter下拉菜单中的数据更新sqlite3表

[英]Updating sqlite3 table with data from tkinter dropdown menu in python

I have two tkinter dropdown menus, created using variables drop_down_var1 and drop_down_var2 , as well as a tkinter text entry box created using the variable id_var .我有两个Tkinter的下拉菜单中,使用变量创建drop_down_var1drop_down_var2 ,以及一个Tkinter的文本输入框使用变量,创建id_var

I want to create an sqlite3 table with an ID key and with data from these dropdown menus.我想创建一个带有 ID 键和来自这些下拉菜单的数据的sqlite3表。 I want the user to be able to insert data through drop_down_var1 , and later on I want the user to be able to update the table through drop_down_var2 and a variable called id_var .我希望用户能够通过drop_down_var1插入数据,稍后我希望用户能够通过drop_down_var2和一个名为id_var的变量更新表。

I'm struggling with the syntax for updating the table.我正在为更新表格的语法而苦苦挣扎。 I've seen how it's done when your data is from a text entry box but not when the data is from a dropdown menu .我已经看到当您的数据来自文本输入框而不是当数据来自下拉菜单时它是如何完成的。

Thanks for any help!谢谢你的帮助!

# To create table and insert data from dropdown menu 1 
self.db.execute('CREATE TABLE all_users IF NOT EXISTS' + drop_down_var1.get() + drop_down_var2.get() + '(id INTEGER PRIMARY KEY)')
self.db.execute('INSERT INTO all_users' + drop_down_var1.get())

# To update table with data from dropdown menu 2 
self.db.execute('UPDATE all_users SET drop_down_var2 = ? WHERE id = ?', (drop_down_var2, id_var)) 

It minimal example which shows how to use StringVar to get value from OptionMenu它显示了如何使用StringVarOptionMenu获取值的最小示例

import tkinter as tk

# --- function ---

def on_click():
    print("value1:", drop_down_var1.get())
    print("value2:", drop_down_var2.get())
    #print(self.db.execute('UPDATE all_users SET drop_down_var2 = ? WHERE id = ?', (drop_down_var2.get(), id_var.get())) 

# --- main ---

master = tk.Tk()

drop_down_var1 = tk.StringVar(master)
drop_down_var1.set("one") # initial value

drop_down_var2 = tk.StringVar(master)
drop_down_var2.set("one") # initial value

drop_down1 = tk.OptionMenu(master, drop_down_var1, "one", "two", "three", "four")
drop_down1.pack()

drop_down2 = tk.OptionMenu(master, drop_down_var2, "one", "two", "three", "four")
drop_down2.pack()

button = tk.Button(master, text="OK", command=on_click)
button.pack()

master.mainloop()

Base on documentation on effbot.org: OptionMenu基于 effbot.org 上的文档: OptionMenu


BTW: If you append to other string then don't forget to add spaces顺便说一句:如果你附加到其他字符串然后不要忘记添加空格

see spaces after EXISTS , between arguments and before (id INTEGER PRIMARY KEY)查看EXISTS之后、参数之间和之前的空格(id INTEGER PRIMARY KEY)

'CREATE TABLE all_users IF NOT EXISTS ' + drop_down_var1.get() + ' ' drop_down_var2.get() + ' (id INTEGER PRIMARY KEY)'

and after all_users毕竟all_users

'INSERT INTO all_users ' + drop_down_var1.get()

Using string formating spaces around {} are better visible{}周围使用字符串格式空格更容易看到

'CREATE TABLE all_users IF NOT EXISTS {} {} (id INTEGER PRIMARY KEY)'.format(drop_down_var1.get(), drop_down_var2.get())

'INSERT INTO all_users {}'.format(drop_down_var1.get())

You can also display string after formatting and test directly in database using tools like DBeaver .您还可以使用DBeaver 等工具直接在数据库中格式化和测试后显示字符串。 Database can give more informatiom if query is incorrect.如果查询不正确,数据库可以提供更多信息。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM