Combobox控件

# Combobox控件
# 通过前面内容的介绍我们知道
# Listbox是一个供用户从列表项中选择相应条目的控件
# 。
# 但在有些情况下,比如列表的项目过多时,若使用列表控件,列出所有选项就会显得界面格外臃肿,这时就需要用到
# # Combobox控件,也就是下拉菜单控件(或称复合框),
# 该控件是列表控件的改进版,具有更加灵活的界面,因此其应用场景相比于前者要更加广泛
# 不过需要注意的是 Combobox 并不包含在 tkinter 模块中,
# 而是包含在tkinter.ttk子模块中,因此若想使用 Combobox 控件,需要使用下面的导包方式

import tkinter as tk
from tkinter import ttk

# 创建主窗口
root = tk.Tk()
root.title("Tkinter Combobox Example")

# 创建 Tkinter 变量
value_var = tk.StringVar()

# 创建 Combobox 控件
combobox = ttk.Combobox(root,
                        values=("Option 1", "Option 2", "Option 3"),
                        state="readonly",
                        width=15,
                        font=("Arial", 12),
                        justify="center",
                        textvariable=value_var)

# 设置 Combobox 的初始值
combobox.current(0)

# 创建 Label 控件来显示 Combobox 的值
label = tk.Label(root, textvariable=value_var, font=("Arial", 12))
label.pack(pady=10)

# 定义验证函数
def validate_input(action):
    # action 参数可以是 '1' (键按下) 或 '0' (焦点离开)
    if action == '1':  # 键盘按键动作
        selected_value = value_var.get()
        # 检查所选值是否在 Combobox 的值列表中
        if selected_value in combobox['values']:
            return True  # 如果在列表中,则允许输入
        else:
            return False  # 如果不在列表中,则不允许输入
    else:
        return True  # 对于其他情况,允许输入

# 将 Combobox 放置在窗口中
combobox.pack(pady=10)

# 设置 validate 和 validatecommand
combobox.config(validate="key",  # 在每次按键时触发验证
                validatecommand=(root.register(validate_input), '%d'))  # 注册验证函数#用途:
# %d 参数在 validatecommand 中用于接收触发验证的原因。它是由 Tkinter 自动传递给验证函数的一个特殊字符串,用于指示触发验证的具体原因。
# '1':表示用户在 Combobox 中按下了键。
# '0':表示 Combobox 失去了焦点

# 运行主循环
root.mainloop()






# 对于 Combobox 控件而言,它常用的方法有两个,
# 分别是 get() 和 current(),
# 前者表示获取当前选中选项的内容,后者表示获取选中选项的索引值


# values:
# Combobox 下拉列表中显示的选项。

# state:
# 控件的状态,可以是 "normal", "readonly", 或 "disabled"。
#readonly的意思是:设置为只读模式,用户只能从下拉列表中选择,不能直接输入

# width:
# Combobox 的宽度(以字符数计)。

# height:
# 下拉列表的高度(以行数计)。

# font:
# 设置 Combobox 内文本的字体。

# justify:
# 文本的对齐方式,可以是 "left", "center", 或 "right"。

# foreground:
# 文本的前景颜色。

# background:
# Combobox 的背景颜色。



# textvariable
# 用途:与 Combobox 的值绑定的 Tkinter 变量。
# 好处:
# 动态更新:通过改变绑定的变量的值来更新 Combobox 的显示内容。
# 数据同步:当 Combobox 的值被改变时,绑定的变量也会自动更新。
# 简化值管理:不需要直接访问 Combobox 的方法来获取或设置其值,而是通过绑定的变量来进行操作。
#textvariable=value_var




# validate
# 用途:设置验证类型,可以是 "none"、"key" 或 "focusout"。
# 好处:允许你在用户输入或选择值时执行验证逻辑。
# none":不执行任何验证。
# "focusout":当控件失去焦点时触发验证。
# "key":每当用户在控件中按下键盘上的键时触发验证

# validatecommand
# 用途:验证命令,当 validate 设置时调用。
# 好处:允许你定义一个函数来执行验证逻辑。

# validate_input 函数用于实现输入验证。
# 函数接受一个参数 d,该参数由 Tkinter 自动传递,表示触发验证的原因。
# 如果 d 为 '1',表示用户在 Combobox 中按下了键。
# 获取 Combobox 当前的值 selected_value。
# 检查 selected_value 是否在 Combobox 的值列表中。如果在列表中,返回 True 表示允许输入;否则返回 False 表示不允许输入。
# 如果 d 不为 '1',则默认返回 True 表示允许输入。
# 设置 validate 和 validatecommand
# combobox.config() 方法用于设置 Combobox 的属性。
# validate="key":设置验证类型为 "key",即在每次按键时触发验证。
# validatecommand 属性设置为 (root.register(validate_input), '%d'):
# root.register(validate_input):注册 validate_input 函数,使得 Tkinter 能够正确地调用它。
# '%d':传递给 validate_input 函数的参数,表示触发验证的原因。在这个例子中,'%d' 代表用户按下键盘上的键

















# postcommand
# 用途:在下拉列表弹出前调用的命令。
# 好处:允许你在下拉列表出现之前执行某些操作,例如更新列表内容
# combobox.config(postcommand=update_values)  # 在下拉列表弹出前调用的命令
#这里的update_values支持自定函数
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值