本篇文章主要 Python Tkinter 的 Spinbox Widget
(๑•̀ㅂ•́)و✧ Python Tkinter Combobox详解
大家好~今天我们来学习Tkinter中的Combobox控件!这是一个超级实用的下拉选择框控件,来自ttk模块哦!
◝(⑅•ᴗ•⑅)◜ 首先导入必要的库
1
2
|
from tkinter import *
from tkinter import ttk
|
(ノ◕ヮ◕)ノ 基础创建
先创建一个简单的Combobox:
1
2
3
4
5
6
7
8
9
10
|
root = Tk()
root.title("Combobox示例")
# 创建Combobox
combo = ttk.Combobox(root)
combo['values'] = (1, 2, 3, 4, 5, "文本") # 设置选项
combo.current(0) # 默认选中第一个
combo.pack(pady=20)
root.mainloop()
|
运行效果:一个简单的下拉选择框就出现啦!

(★ω★) 常用属性全掌握
Combobox有很多实用的属性:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# 状态设置
combo['state'] = 'readonly' # 只能选择不能输入
# combo['state'] = 'disabled' # 禁用
# combo['state'] = 'normal' # 正常可编辑
# 设置宽度
combo['width'] = 15
# 设置提示文本
combo.set("请选择...")
# 文本对齐方式
combo['justify'] = 'center' # left/right/center
|
绑定变量
♪(^∇^*) 使用StringVar进行变量绑定
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
from tkinter import *
from tkinter import ttk
root = Tk()
root.title("Combobox变量绑定")
# 创建StringVar变量
selected_language = StringVar()
# 创建Combobox并绑定变量
combo = ttk.Combobox(root, textvariable=selected_language)
combo['values'] = ('Python', 'Java', 'C++', 'JavaScript')
combo.pack(pady=20)
# 显示当前选择值的标签
label = Label(root, textvariable=selected_language)
label.pack()
root.mainloop()
|

(ノ◕ヮ◕)ノ*:・゚✧ 变量绑定的优势
变量绑定的好处可多啦:
- 自动同步:Combobox的选择会自动更新绑定的变量
- 双向绑定:修改变量值也会自动更新Combobox显示
- 方便追踪:可以添加trace监视变量变化
(•̀ᴗ•́)و 使用trace监控变化
1
2
3
4
5
|
def language_changed(*args):
print(f"语言变更为: {selected_language.get()}")
# 添加变量追踪
selected_language.trace('w', language_changed) # 'w'表示写入时触发
|
(ง ื▿ ื)ว 完整示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
from tkinter import *
from tkinter import ttk
def show_selection():
print(f"当前选择(通过get()): {combo.get()}")
print(f"当前选择(通过变量): {selected_language.get()}")
root = Tk()
root.title("Combobox变量绑定完整示例")
# 变量绑定
selected_language = StringVar(value="请选择") # 设置初始值
# Combobox设置
combo = ttk.Combobox(root,
textvariable=selected_language,
values=['Python', 'Java', 'C++', 'Go'],
state='readonly')
combo.pack(pady=10)
# 按钮用于显示当前选择
Button(root, text="显示选择", command=show_selection).pack(pady=5)
# 变量变化追踪
def trace_callback(*args):
print(f"[TRACE] 值变化为: {selected_language.get()}")
selected_language.trace_add('write', trace_callback) # 替代旧的trace方法
root.mainloop()
|
٩(◕‿◕。)۶ 小贴士
-
变量类型选择:
StringVar
:用于字符串选项
IntVar
:如果选项都是数字时使用
-
初始化设置:
1
|
selected = StringVar(value="默认值") # 创建时设置初始值
|
-
多控件绑定:
1
2
3
|
# 多个控件可以绑定同一个变量
combo1 = ttk.Combobox(root, textvariable=selected_language)
combo2 = ttk.Combobox(root, textvariable=selected_language)
|
-
注意事项:
- 变量绑定后,直接修改变量值会覆盖用户选择
- 在验证时要小心无限循环
(`・ω・´) 绑定事件
我们经常需要在选择后执行一些操作:
1
2
3
4
|
def callback(event):
print("你选择了:", combo.get())
combo.bind("<<ComboboxSelected>>", callback)
|
(•̀ᴗ•́)و 更多实用技巧
-
获取和设置当前值:
1
2
|
current_value = combo.get()
combo.set("新值")
|
-
动态更新选项:
1
2
|
new_values = ['A', 'B', 'C']
combo['values'] = new_values
|
-
验证输入:
1
2
3
4
5
|
def validate(new_value):
return new_value in combo['values']
combo['validate'] = 'all'
combo['validatecommand'] = (combo.register(validate), '%P')
|
[̲̅$̲̅(̲̅ ͡° ͜ʖ ͡°̲̅)̲̅$̲̅] 完整示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
from tkinter import *
from tkinter import ttk
def on_select(event):
selected = combo.get()
label.config(text=f"你选择了: {selected}")
root = Tk()
root.title("Combobox完整示例")
label = Label(root, text="请从下拉框中选择")
label.pack(pady=10)
combo = ttk.Combobox(root,
values=["Python", "Java", "C++", "JavaScript"],
state='readonly')
combo.set("选择编程语言") # 设置默认文本
combo.pack(pady=10)
combo.bind("<<ComboboxSelected>>", on_select)
root.mainloop()
|
(ง •̀_•́)ง 小贴士
- Combobox来自ttk模块,外观更现代哦~
- 记得处理用户可能的异常输入
- 结合其他控件一起使用效果更佳
学会了Combobox,你的GUI工具又多了一种互动方式!快去试试吧~ ٩(◕‿◕。)۶