Python tkinter之ComboBox(下拉框)
1、ComboBox的基础属性
# -*- encoding=utf-8 -*- import tkinter from tkinter import * from tkinter import ttk if __name__ == '__main__': win = tkinter.Tk() # 窗口 win.title('南风丶轻语') # 标题 screenwidth = win.winfo_screenwidth() # 屏幕宽度 screenheight = win.winfo_screenheight() # 屏幕高度 width = 600 height = 500 x = int((screenwidth - width) / 2) y = int((screenheight - height) / 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置 value = StringVar() value.set('CCC') values = ['AAA', 'BBB', 'CCC', 'DDD'] combobox = ttk.Combobox( master=win, # 父容器 height=10, # 高度,下拉显示的条目数量 width=20, # 宽度 state='readonly', # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('', 20), # 字体 textvariable=value, # 通过StringVar设置可改变的值 values=values, # 设置下拉框的选项 ) print(combobox.keys()) # 可以查看支持的参数 combobox.pack() win.mainloop()
2、绑定选中事件
# -*- encoding=utf-8 -*- import tkinter from tkinter import * from tkinter import ttk def choose(event): # 选中事件 print('选中的数据:{}'.format(combobox.get())) print('value的值:{}'.format(value.get())) if __name__ == '__main__': win = tkinter.Tk() # 窗口 win.title('南风丶轻语') # 标题 screenwidth = win.winfo_screenwidth() # 屏幕宽度 screenheight = win.winfo_screenheight() # 屏幕高度 width = 600 height = 500 x = int((screenwidth - width) / 2) y = int((screenheight - height) / 2) win.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 大小以及位置 value = StringVar() value.set('CCC') # 默认选中CCC==combobox.current(2) values = ['AAA', 'BBB', 'CCC', 'DDD'] combobox = ttk.Combobox( master=win, # 父容器 height=10, # 高度,下拉显示的条目数量 width=20, # 宽度 state='normal', # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('', 20), # 字体 textvariable=value, # 通过StringVar设置可改变的值 values=values, # 设置下拉框的选项 ) combobox.bind('<<ComboboxSelected>>', choose) print(combobox.keys()) # 可以查看支持的参数 combobox.pack() win.mainloop()
3、省市联动(选中第一个下拉框,自动改变第二个下拉框的值)
from tkinter import StringVar from tkinter import Tk from tkinter import ttk def middle_windows(window, width=400, height=500): # 设置窗口居中 screenwidth = window.winfo_screenwidth() # 屏幕宽度 screenheight = window.winfo_screenheight() # 屏幕高度 x = int((screenwidth - width) / 2) # x轴坐标 y = int((screenheight - height) / 2) # y轴坐标 window.geometry('{}x{}+{}+{}'.format(width, height, x, y)) # 放置窗口 window.update() # 更新窗口 def choose(event): widget = event.widget # 当前的组件 value = widget.get() # 选中的值 print('value:{}'.format(value)) if value == 'AAA': value2.set('') # 设置默认是空串 combobox2.configure(values=['AAA1', 'AAA2', 'AAA3']) # 重新设置combobox2可下拉的值 elif value == 'BBB': value2.set('') # 设置默认是空串 combobox2.configure(values=['BBB1', 'BBB2', 'BBB3']) # 重新设置combobox2可下拉的值 else: value2.set('') # 设置默认是空串 combobox2.configure(values=[]) # 重新设置combobox2可下拉的值 if __name__ == '__main__': win = Tk() middle_windows(win) values1 = ['', 'AAA', 'BBB'] value1 = StringVar(win) value1.set(values1[0]) combobox1 = ttk.Combobox( master=win, # 父容器 height=10, # 高度,下拉显示的条目数量 width=20, # 宽度 state='readonly', # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('', 16), # 字体 textvariable=value1, # 通过StringVar设置可改变的值 values=values1, # 设置下拉框的选项 background='pink', ) print(combobox1.keys()) # 可以查看支持的参数 combobox1.bind('<<ComboboxSelected>>', choose) # 绑定选中事件 combobox1.pack(pady=(50, 0)) value2 = StringVar(win) value2.set('') combobox2 = ttk.Combobox( master=win, # 父容器 height=10, # 高度,下拉显示的条目数量 width=20, # 宽度 state='readonly', # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled cursor='arrow', # 鼠标移动时样式 arrow, circle, cross, plus... font=('', 16), # 字体 textvariable=value2, # 通过StringVar设置可改变的值 ) combobox2.pack(pady=(100, 0)) win.mainloop()
运行