Обновление таблицы sqlite3 данными из выпадающего меню tkinter в python - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть два выпадающих меню 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)) 

1 Ответ

0 голосов
/ 02 апреля 2020

Это минимальный пример, который показывает, как использовать 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 . База данных может дать больше информации, если запрос неверен.

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