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