首页 > 解决方案 > 使用 python 中 tkinter 下拉菜单中的数据更新 sqlite3 表

问题描述

我有两个 tkinter 下拉菜单,使用变量drop_down_var1和创建drop_down_var2,以及使用变量创建的 tkinter 文本输入框id_var

我想sqlite3用 ID 键和这些下拉菜单中的数据创建一个表。我希望用户能够通过 插入数据drop_down_var1,稍后我希望用户能够通过drop_down_var2一个名为id_var.

我正在为更新表格的语法而苦苦挣扎。我已经看到当您的数据来自文本输入框时它是如何完成的,而不是当数据来自下拉 菜单时。

谢谢你的帮助!

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

标签: pythonsqlitetkinter

解决方案


它是一个最小的例子,展示了如何使用StringVar从中获取价值OptionMenu

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

基于 effbot.org 上的文档:OptionMenu


顺便说一句:如果您附加到其他字符串,那么不要忘记添加空格

EXISTS在参数之后、参数之间和之前查看空格(id INTEGER PRIMARY KEY)

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

之后all_users

'INSERT INTO all_users ' + drop_down_var1.get()

在周围使用字符串格式化空格{}更容易看到

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

您还可以使用DBeaver等工具直接在数据库中格式化和测试后显示字符串。如果查询不正确,数据库可以提供更多信息。


推荐阅读