大致原理:
通过点击下拉框之前获取下拉文本内容,通过筛选所有选项,选出符合条件的数据,然后再渲染给弹出的下拉选项框。默认是全部选项数据。
实现效果图:
代码如下:
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版权协议,转载请附上原文出处链接和本声明。