Вернуть значение из выпадающего списка в Tkinter - PullRequest
0 голосов
/ 10 января 2019

Вот мой ComboBox в Tkinter. Когда я хочу что-то выбрать из этого списка, ничего не происходит. Я вижу все опции, выбранные курсором из базы данных, но я бы сказал, что это «только для чтения». Для тестирования я написал одно заявление if, чтобы убедиться в этом, но, к сожалению, окно сообщения не появляется. Я думаю, что мне нужно что-то еще, чтобы управлять этим списком, пожалуйста, помогите мне.

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

Когда я печатаю «data_models», я вижу:

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

1 Ответ

0 голосов
/ 10 января 2019

Добавить след в StringVar Combobox:

#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. В этом коде список chosen передается в функцию, а значение добавляется в список, затем список печатается.

#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()))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...