Tkinter Combobox динамически устанавливает значения - PullRequest
1 голос
/ 09 марта 2019

Я пытаюсь установить параметры комбинированного списка Tkinter динамически.Мой код почти работает, и я не уверен, почему.

Код предназначен для ввода строки в поле ввода.Затем он ищет в списке любые элементы, содержащие эту строку.Так, например, если вы введете

Mi

в поле ввода, список станет

['Микки', 'Минни']

Все это работает как положено.

Атрибут Combobox [values] должен обновляться всякий раз, когда <FocusIn> запускается с помощью функции.Это действительно происходит, но только после того, как я дважды нажму на Combobox.Я не уверен, почему щелчок по нему в первый раз не вызывает привязку <FocusIn>.Это неправильное связывание?Есть ли что-то в моей лямбда-функции, которая не совсем подходит?Хотелось бы помочь!

Код:

from tkinter import *
from tkinter import ttk

init_list = ['Mickey', 'Minnie', 'Donald', 'Pluto', 'Goofy']

def db_values():
    i = inp_var.get()
    db_list = [x for x in init_list if i in x]
    print(db_list)
    return db_list

def db_refresh(event):
    db['values'] = db_values()

root = Tk()
title_label = Label(root, text="Partial string example")
title_label.grid(column=0, row=0)

inp_var = StringVar()
input_box = Entry(root, textvariable=inp_var)
input_box.grid(column=0, row=1)

name_selected = StringVar()
db = ttk.Combobox(root, textvariable=name_selected)
db['values'] = db_values()
db.bind('<FocusIn>', lambda event: db_refresh(event))
db.grid(column=0, row=2, sticky=EW, columnspan=3, padx=5, pady=2)

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