Tkinter Combobox 动态设置值

问题描述 投票:0回答:2

我正在尝试动态设置 Tkinter 组合框的选项。我的代码几乎可以工作,但我不知道为什么。

该代码旨在允许在输入框中输入字符串。然后,它在列表中搜索包含该字符串的任何项目。例如,如果您输入

进入输入框,列表变为

[‘米奇’、‘米妮’]

这一切都按预期进行。

只要使用函数触发

[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()
python tkinter
2个回答
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()

只需要这个小小的改变。列表值必须在函数本身中分配。


0
投票

来自海龟进口* 重置() 速度(1) bgcolor(“白色”) title("三角形和正方形相交") 设置位置(0,0) def draw_triangle(尺寸, fcolor): 笔号(尺寸) 颜色('蓝色',f颜色) 开始填充() 对于范围 (3) 内的 i: 前进(100) 左(120) 结束填充() def draw_square(尺寸,颜色): 设置位置(-20,0) 笔号(尺寸) 笔色(颜色) 对于范围 (4) 内的 i: 前进(140) 左(90) def 显示名称(名称,字体大小): 画笔() 设置位置(50, 90) 落笔() 颜色:黑色”) 写(名称,对齐='中心',字体=(“arial”,font_size)) 绘制三角形(3,'橙色') draw_square(3,'棕色') 显示名称('moaz',15) ht()#隐藏乌龟

© www.soinside.com 2019 - 2024. All rights reserved.