Python 从Tkinter中的combobox返回值

Python 从Tkinter中的combobox返回值,python,sqlite,tkinter,Python,Sqlite,Tkinter,这是我在Tkinter的组合框。当我想从这个组合框中选择一些东西时,什么都不会发生。我看到光标从数据库中选择的所有选项,但我认为它是“只读”的。为了测试,我编写了一个if语句来确保这一点,但不幸的是messagebox并没有出现。我想我需要更多的东西来操作这个组合框,请帮助我 var1 = StringVar() lblChooseaModel = Label(bottomLeftTopR, font = ('arial', 12, 'bold'), text = "Choose a mode

这是我在Tkinter的组合框。当我想从这个组合框中选择一些东西时,什么都不会发生。我看到光标从数据库中选择的所有选项,但我认为它是“只读”的。为了测试,我编写了一个if语句来确保这一点,但不幸的是messagebox并没有出现。我想我需要更多的东西来操作这个组合框,请帮助我

var1 = StringVar()
lblChooseaModel = Label(bottomLeftTopR, font = ('arial', 12, 'bold'), text = 
"Choose a model", fg = "black", width = 13, bd = 14, anchor = 'w')

lblChooseaModel.grid(row = 0, column = 0)

cboChooseaModel = ttk.Combobox(bottomLeftTopR, textvariable = var1, font = 
('arial', 20, 'bold'), width = 12)

models_query = cur.execute('SELECT name_of_model FROM models')
data_models = ['']
for row in models_query:
    data_models.append(row)

cboChooseaModel['value'] = data_models
cboChooseaModel.current(0)
cboChooseaModel.grid(row = 1, column = 0)

if cboChooseaModel.get() == (data_models[1]):
    messagebox.showinfo("You chose Mazda 2")
当我打印“数据模型”时,我可以看到:

['',('Mazda 2'),('Mazda 3'),('Mazda 6'),('Mazda CX 3'),('Mazda CX 5')]


向组合框的StringVar添加跟踪:

#tkinter setup
from tkinter import *
import tkinter.ttk as ttk
from tkinter import messagebox
bottomLeftTopR = Tk()

def combo_choose(value):
    messagebox.showinfo("Choice", "You Chose " + value)

var1 = StringVar()
lblChooseaModel = Label(bottomLeftTopR, font = ('arial', 12, 'bold'),text = "Choose a model",
                        fg = "black", width = 13, bd = 14, anchor = 'w')

lblChooseaModel.grid(row = 0, column = 0)

cboChooseaModel = ttk.Combobox(bottomLeftTopR, textvariable = var1,
                               font = ('arial', 20, 'bold'), width = 12)

#models_query = cur.execute('SELECT name_of_model FROM models')
#data_models = ['']
#for row in models_query:
#    data_models.append(row)

# Replaced query with data
data_models = [ ' ', ('Mazda 2'), ('Mazda 3'), ('Mazda 6'), ('Mazda CX 3'), ('Mazda CX 5') ]

cboChooseaModel['value'] = data_models
cboChooseaModel.current(0)
cboChooseaModel.grid(row = 1, column = 0)

var1.trace('w', lambda name, index, mode: combo_choose(var1.get()))
在combo_choose函数中,您可以对所选值执行任何操作。在此代码中,选择的列表<代码>被传递给函数,值被附加到列表中,然后打印列表

#tkinter setup
from tkinter import *
import tkinter.ttk as ttk
from tkinter import messagebox
bottomLeftTopR = Tk()

def combo_choose(chosen, value):
    chosen.append(value)
    print("You've chosen ", *chosen)
    print(chosen)

var1 = StringVar()
lblChooseaModel = Label(bottomLeftTopR, font = ('arial', 12, 'bold'),text = "Choose a model",
                        fg = "black", width = 13, bd = 14, anchor = 'w')

lblChooseaModel.grid(row = 0, column = 0)

cboChooseaModel = ttk.Combobox(bottomLeftTopR, textvariable = var1,
                               font = ('arial', 20, 'bold'), width = 12)

#models_query = cur.execute('SELECT name_of_model FROM models')
#data_models = ['']
#for row in models_query:
#    data_models.append(row)

# Replaced query with data
data_models = [ ' ', ('Mazda 2'), ('Mazda 3'), ('Mazda 6'), ('Mazda CX 3'), ('Mazda CX 5') ]

cboChooseaModel['value'] = data_models
cboChooseaModel.current(0)
cboChooseaModel.grid(row = 1, column = 0)

chosen = []
var1.trace('w', lambda name, index, mode: combo_choose(chosen, var1.get()))

你能给问题添加更多的上下文吗?我需要从数据库中选择记录。我的数据库中有每种车型的价格。我的下一步是将每个组合框中的价格相加,得到最终的汽车价格,因此用数据替换查询是错误的。我这样做是为了我自己,因为我没有什么要查询的,我假设提供的数据是查询的结果。是的,它工作了!如果我想保存所选的值,而不仅仅是显示信息,该怎么办?我添加了一个将值附加到列表的示例。