我正在尝试动态设置Tkinter组合框的选项。我的代码几乎有效,我不确定为什么。
该代码旨在允许在“输入”框中键入字符串。然后,它在列表中搜索包含该字符串的所有项目。例如,如果您输入
Mi
进入输入框,列表变为
['米奇','米妮']
所有这些均按预期工作。
使用功能触发[values]
时,组合框<FocusIn>
属性应该更新。确实确实发生了,但是只有在我两次单击组合框之后。我不确定为什么第一次单击它不会触发<FocusIn>
绑定。这是错误的绑定吗?关于我的lambda函数,是否有一些不正确的地方?希望有帮助!
代码:
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()
答案 0 :(得分:2)
def db_values():
i = inp_var.get()
db_list = [x for x in init_list if i in x]
print(db_list)
db['values'] = db_values()
仅此小更改是必需的。列表值必须在函数本身中分配。