Python GUI 编程:tkinter 初学者入门指南——Ttk 组合框 Combobox

在本文中,将介绍如何创建一个 tkinter Combobox 组合框小部件,该小部件允许用户从一组值中选择一个值。

Combobox 组合框小部件是新增的 Ttk 主题小部件,是 Entry 文本框和 Listbox 列表框的组合。除了允许在一组值中选择一个值外,它还允许输入自定义值。

创建组合框

要创建组合框小部件,使用以下构造函数。

复制代码
current_var = tk.StringVar()
combobox = ttk.Combobox(master, textvariable=current_var)

获取组合框选定的值

textvariable 参数将变量链接到 current_var。要获取当前组合框选定的值,可以使用 current_var 变量。

复制代码
current_value = current_var.get()

或者,直接使用 combobox 对象的 get() 方法:

复制代码
current_value = combobox.get()

设置组合框的值

要设置当前值,可以使用 current_var 变量或 combobox 对象的 set() 方法。

复制代码
current_value.set(new_value)

combobox.set(new_value)

默认情况下,可以直接在组合框中输入值。如果不允许直接输入值,可以将组合框设置为只读 readonly 否则,设置为 normal

复制代码
combobox['state'] = 'readonly'

批量设置组合框的值

可以为组合框分配一个列表或元组,进行批量赋值。

复制代码
combobox['values'] = ('value1', 'value2', 'value3')`

绑定事件

当组合框的值发生更改时,可以触发事件,使用 bind() 方法绑定 <<ComboboxSelected>> 事件。

combobox.bind('<<ComboboxSelected>>', callback)

Combobox 组合框示例

复制代码
import tkinter as tk
from tkinter.messagebox import showinfo
from tkinter import ttk
from calendar import month_name
from datetime import datetime
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Combobox 组合框演示')
def year_changed(event):
    showinfo(title='结果', message=f'你选择了 {selected_year.get()}!'
    )
def month_changed(event):
    showinfo(title='结果', message=f'你选择了 {selected_month.get()}!'
    )

label = tk.Label(text="请选择年份:")
label.pack(fill=tk.X, padx=5, pady=5)
selected_year = tk.StringVar()
combobox1 = ttk.Combobox(root, textvariable=selected_year)
combobox1['values'] = [2023, 2024, 2025]
combobox1['state'] = 'readonly'
combobox1.pack(padx=5, pady=5)
combobox1.bind('<<ComboboxSelected>>', year_changed)

label = tk.Label(text="请选择月份:")
label.pack(fill=tk.X, padx=5, pady=5)
selected_month = tk.StringVar()
combobox2 = ttk.Combobox(root, textvariable=selected_month)
combobox2['values'] = [month_name[m][0:3] for m in range(1, 13)]
combobox2['state'] = 'readonly'
combobox2.pack(padx=5, pady=5)
combobox2.bind('<<ComboboxSelected>>', month_changed)

# 设置当前月份为组合框的当前值
current_month = datetime.now().strftime('%b')
combobox2.set(current_month)
root.mainloop()

组合框联动

复制代码
import tkinter as tk
from tkinter import ttk
root = tk.Tk()
root.geometry('600x400+200+200')
root.title('Combobox 组合框演示')

label = tk.Label(text="请选择省份:")
label.pack(fill=tk.X, padx=5, pady=5)
combobox1 = ttk.Combobox(root)
combobox1['values'] = ["山东省", "江苏省", "吉林省"]
combobox1['state'] = 'readonly'
combobox1.pack(padx=5, pady=5)

label = tk.Label(text="请选择城市:")
label.pack(fill=tk.X, padx=5, pady=5)
combobox2 = ttk.Combobox(root)
combobox2['state'] = 'readonly'
combobox2.pack(padx=5, pady=5)

# 联动响应
region = {
  '山东省': ["济南", "青岛", "淄博"],
  '江苏省': ["南京", "苏州" ],
  '吉林省': ["长春", "吉林"]
}
def handle(event):
  selected = combobox1.get()
  combobox2['values'] = region[selected]

combobox1.bind('<<ComboboxSelected>>', handle)  
root.mainloop()
相关推荐
weixin199701080167 分钟前
《二手ERP对接闲鱼API:聚石塔强制入塔后的架构重构实录》(附Python源码)
python
小白快快跑哦14 分钟前
python-字符串全解(六):正则表达式-转义与非转义
python·正则表达式·转义与非转义
IvanCodes6 小时前
Python 数据处理(十三):JSON、CSV 与数据序列化
开发语言·python
Patrick在香港7 小时前
Claude 工具调用返回空:8 次失败里只有 1 次状态码不对,其余全带 200
爬虫·python·api·claude·香港
Web3&Basketball7 小时前
CRM Agent 后训练实战:3 倍更少错误
python·架构·大模型·agent·推理
AIFQuant8 小时前
ETF行情API接入踩坑记:从报错到跑通的七个问题
python·金融·区块链·etf·基金
GPU实战笔记9 小时前
云端 Python 开发:JupyterLab 还是 VS Code Remote-SSH?
python·vs code·jupyterlab·remote-ssh·远程开发
狗狗狗狗狗乐啊10 小时前
搭一个 AI 对话工作台 AChat:从 0 到可用的完整记录(一)
python·react.js·ai编程
白猫不黑10 小时前
Python实现简易Web弱口令爆破与防护方案
python·web安全·计算机·网络安全·黑客·信息安全·渗透测试
kuuailetianzi11 小时前
Python初识:定位、优势与发展历程
python