tk(ttkbootstrap)下拉实现简单模糊查询

大致原理:

通过点击下拉框之前获取下拉文本内容,通过筛选所有选项,选出符合条件的数据,然后再渲染给弹出的下拉选项框。默认是全部选项数据。

实现效果图:

                          

                          

 

代码如下:

import ttkbootstrap as tk
from ttkbootstrap.constants import *

base_server_data = ['刘小二', '刘备', '刘邦', '刘秀', '张三', '张三丰', '张X良', '张X友', '德华', '赵四', '赵五']


def get_info():
    """
    提交按钮绑定函数
    :return:
    """
    print('点击提交,继续下面逻辑')


def set_value_before_choose():
    """
    选择前根据文本框的内容筛选符合条件的数据
    :return:
    """
    print('选择前下拉框的值:', select_text_data.get())

    global base_server_data
    new_select_data = []
    for i in base_server_data:
        if select_text_data.get() in i:  # 关键字在该选项中则追加到新的list中
            new_select_data.append(i)

    select_box_obj["value"] = new_select_data  # 重新给下拉框赋值


"""
主题选择   分为light和dark
light:cosmo - flatly - journal - litera - lumen - minty - pulse - sandstone - united - yeti
dark:cyborg - darkly - solar - superhero
"""
root = tk.Window(themename='pulse')

root.geometry('550x200+650+300')  # A*B+C+D  四个参数分别代表展示框的长、宽、左边距、上边距
root.title('选择角色')  # 弹框标题设置
root.wm_attributes('-topmost', 1)  # 弹框展示悬浮属性  可设置参数:-disabled(仅展示,不可操作) -toolwindow  -topmost(悬浮最上层)

tk.Label(root, text='角色:', font=('微软雅黑', 10)).grid(row=7, column=1, sticky=tk.W, padx=40, pady=30)

container_obj = tk.Frame()
container_obj.grid(row=7, column=2, sticky=tk.W)  # 设置容器位置

select_text_data = tk.StringVar()

select_box_obj = tk.Combobox(
    master=container_obj,
    # text=style.theme.name,
    textvariable=select_text_data,
    font=('微软雅黑', 10),
    values=base_server_data,  # 下拉框的值
    height=15,  # 高度
    width=30,  # 宽度
    state='normal',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
    cursor='plus',  # 鼠标移动时样式 arrow, circle, cross, plus...
    postcommand=set_value_before_choose  # 选择前方法回调
)
# select_box_obj.current(2) # 设置默认值,根据values里面的列表,默认展示对应索引的值  若是2则展示第三个值
select_box_obj.pack(padx=5, side=RIGHT)


def submit_result(event):
    print('当前选择{}'.format(select_box_obj.get()))


select_box_obj.bind('<<ComboboxSelected>>', submit_result)  # 下拉绑定事件

button = tk.Button(root, text='提 交', width=10)
button.grid(row=10, column=2, sticky=tk.W, pady=40, padx=190)
button.config(command=get_info)
root.mainloop()


版权声明:本文为liuyili610原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。