QComboBox 下拉选择框
QComboBox(parent: QWidget = None) # 创建QComboBox对象的同时设置父对象
addItem(str, userData: Any = None) # 添加一个条目,显示内容和后台数据
addItem(QIcon, str, userData: Any = None) # 添加添加一个条目,图标、显示内容和后台数据
addItems(Iterable[str]) # 通过一个迭代器添加一批条目
insertItem(int, str, userData: Any = None) # 在指定索引处插入一个条目,显示内容和后台数据
insertItem(int, QIcon, str, userData: Any = None) # 在指定索引处插入一个条目,图标、显示内容和后台数据
insertItems(int, Iterable[str]) # 在指定索引处通过一个迭代器添加一批条目
setItemIcon(int, QIcon) # 通过索引,设置该条目的图标
setItemText(int, str) # 通过索引,设置该条目的显示文本
setItemData(int, Any, role: int = Qt.UserRole) # 通过索引,设置用户数据
removeItem(int index) # 删除指定索引条目
insertSeparator(int index) # 在指定索引位置插入一条分割线
setCurrentIndex(int index) # 通过索引设置下拉框默认显示值
setCurrentText(QString text) # 通过条目显示文本设置下拉框默认显示值
setEditable(bool editable) # 设置默认值是否可以被编辑
# 允许被编辑时,编辑后按回车键,会将编辑后的新内容添加到下拉框中
setEditText(QString text) # 默认值设置可被编辑时,重新设置显示文本内容
# 了解模型操作(后面会具体讲模型)
# 通过设置模型,可以使下拉框显示表格、数目录等
setModel(QAbstractItemModel model)
setModelColumn(int visibleColumn)
setRootModelIndex(QModelIndex index)
model()
modelColumn()
rootModelIndex()
# 了解视图操作
setView(QAbstractItemView *itemView)
view()
# 了解代理设置
setItemDelegate(QAbstractItemDelegate *delegate)
count() -> int # 获取下拉选择框总条目数
itemIcon(int index) -> QIcon # 获取指定索引条目的图标对象
itemText(int index) -> str # 获取指定索引条目的文本内容
itemData(int index) -> Any # 获取指定索引条目的用户数据
currentIndex() -> int # 获取当前选中条目索引
currentText() -> str # 获取当前选中条目文本
currentDate() -> any # 获取当前选中条目用户数据
cb.itemIcon(cb.currentIndex()) # 配合使用,获取当前选中条目的图标
setMaxCount(int max) # 设置最大存储条目数,达到最大后就不允许添加了,而不是删除老的,添加新的
maxCount() # 获取最大存储条目数
setMaxVisibleItems(int maxItems) # 设置下拉框一屏显示条目数,条目数过多则出现滚动条
maxVisibleItems() # 获取下拉框一屏显示条目数
setEditable(bool editable) # 设置显示框是否可以被编辑
# 允许被编辑时,编辑后按回车键,会将编辑后的新内容添加到下拉框中
isEditable() # 获取显示框是否可以被编辑
setDuplicatesEnabled(bool enable) # 设置是否允许将重复内容追加到下拉框中(可编辑状态输入内容按回车时)
duplicatesEnabled() # 获取是否允许将重复内容追加到下拉框中
setFrame(bool) # 设置是否显示边框
hasFrame() # 获取是否显示边框
setIconSize(QSize(w, h)) # 统一设置图标尺寸
iconSize() # 获取图标尺寸
setSizeAdjustPolicy(QComboBox.SizeAdjustPolicy policy) # 设置下拉框尺寸调整策略
# 参数 QComboBox.SizeAdjustPolicy
QComboBox.AdjustToContents # 组合框将始终根据内容进行调整
QComboBox.AdjustToContentsOnFirstShow # 组合框将在第一次显示时调整其内容。
QComboBox.AdjustToMinimumContentsLength # 组合框将调整为设置的最小内容长度进行调整,请改用AdjustToContents或AdjustToContentsOnFirstShow。
QComboBox.AdjustToMinimumContentsLengthWithIcon # 组合框将调整为设置最小内容长度加上图标的空间。出于性能原因,请在大型模型上使用此策略。
sizeAdjustPolicy() -> QComboBox.SizeAdjustPolicy # 获取下拉框尺寸调整策略
setMinimumContentsLength(int characters) # 设置最小内容长度
minimumContentsLength() -> int # 获取最小内容长度
clear() # 清除所有存储的条目
clearEditText() # 清除组合框中处于编辑的内容(清除选中内容)
showPopup() # 弹出下拉框
setCompleter(QCompleter completer) # 设置完成器
completer() -> QCompleter 获取完成器对象
setValidator(QValidator validator) # 设置验证器
# 传入一个QValidator对象
# 通过子类化QValidator类,重写validator() 和 fixup() 方法,对输入内容进行验证
#
validator() # 获取验证器对象
activated(int index) # 某个条目被选中时(必须是用户交互), 造成的值改变才会发射这个信号,发送选中条目的索引
activated(QString text) # (重载)某个条目被选中时(必须是用户交互), 造成的值改变才会发射这个信号,发送选中条目的显示文本
currentIndexChanged(int index) # 当前选中的索引发生改变时(用户交互、代码控制),发送选中条目的索引
currentIndexChanged(QString text) # (重载)当前选中的索引发生改变时(用户交互、代码控制),发送选中条目的显示文本
currentTextChanged(QString text) # 当前的文本内容发生改变时,发送新的文本内容(包括重新选中条目、修改当前条目的显示文本)
editTextChanged(QString text) # 可编辑状态下,编辑的文本发生改变时,发送新的文本内容
highlighted(int index) # 高亮发生改变时,发送高亮条目的索引(鼠标放上去的时候)
highlighted(QString text) # (重载)高亮发生改变时,发送高亮条目的显示文本,鼠标放上去的时候
textHighlighted(self, str) # 显示文本高亮发生改变时,发送高亮条目的显示文本
currentTextChanged
和 editTextChanged
activated
和 currentIndexChanged
QFontComboBox
setCurrentFont(QFont f)
currentFont() -> QFont
setFontFilters(QFontComboBox.FontFilters)
fontFilters() -> QFontComboBox.FontFilters
# 参数 QFontComboBox.FontFilters
QFontComboBox.AllFonts # 显示所有字体
QFontComboBox.ScalableFonts # 显示可缩放字体
QFontComboBox.NonScalableFonts # 显示不可缩放的字体
QFontComboBox.MonospacedFonts # 显示等宽字体
QFontComboBox.ProportionalFonts # 显示比例字体
# 继承父类
currentIndexChanged(QString int) # 当前索引发生改变时发射信号,传递条目索引号
currentIndexChanged(QString text) # (重载)当前索引发生改变时发射信号,传递条目显示内容
currentFontChanged(QFont font) # 当前字体发生改变时发射信号,传递一个QFont对象
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QComboBox-创建使用')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
cb = QComboBox(self)
cb.resize(150, 30)
cb.move(10, 50)
btn = QPushButton('获取数据1',self)
btn.move(10, 100)
btn2 = QPushButton('获取数据2', self)
btn2.move(120, 100)
pass # 添加条目
# ****************添加条目****************** 开始
# cb.addItem('湖南')
# cb.addItem('湖北')
# cb.addItem(QIcon('../images/jpg/home.jpg'), '北京')
# cb.addItems(['广东','四川','江西','广西'])
# ****************添加数据****************** 结束
pass # 插入条目
# ****************插入条目****************** 开始
# cb.insertItem(0, '甘肃')
# cb.insertItem(1, QIcon('../images/jpg/save.jpg'), '陕西')
# cb.insertItems(1, ('黑龙江','吉林','辽宁'))
# ****************插入条目****************** 结束
pass # 设置条目
# ****************设置条目****************** 开始
# cb.setItemIcon(0, QIcon('../images/jpg/save.jpg'))
# cb.setItemText(0,'甘肃省')
# cb.setItemData(0, '甘肃')
# ****************设置条目****************** 结束
pass # 模型操作
# ****************模型操作****************** 开始
# 模型操作、视图操作、代理设置后面会详细讲解
# ****************模型操作****************** 结束
pass # 删除条目
# ****************删除条目****************** 开始
# cb.removeItem(0)
# ****************删除条目****************** 结束
pass # 插入分割线
# ****************插入分割线****************** 开始
# cb.insertSeparator(3)
# cb.insertSeparator(6)
# ****************插入分割线****************** 结束
pass # 设置默认显示值
# ****************设置默认显示值****************** 开始
# cb.setCurrentIndex(4)
# cb.setCurrentText('广东')
# cb.setEditable(True)
# cb.setEditText('广东省啊')
# ****************设置默认显示值****************** 结束
pass # 获取数据
# ****************获取数据****************** 开始
# ls = ['湖南','广东', '四川', '江西', '广西', '黑龙江', '吉林', '辽宁','湖北']
# for i, v in enumerate(ls):
# cb.addItem(v, i * 10)
#
# def btn_cao():
# print('count:', cb.count())
# print('Index:', cb.currentIndex())
# print(' Text:', cb.currentText())
# print(' Date:', cb.currentData())
# print(' Icon:', cb.itemIcon(cb.currentIndex()))
#
# def btn_cao2():
# print(cb.itemIcon(cb.count()-1))
# print(cb.itemText(cb.count()-1))
# print(cb.itemData(cb.count()-1))
#
#
# btn.clicked.connect(btn_cao)
# # btn2.clicked.connect(btn_cao2)
# print(cb.count())
# btn2.clicked.connect(lambda _, index=cb.count()-1: print(cb.itemIcon(index), cb.itemText(index), cb.itemData(index)))
# # clicked(self, checked: bool = False)
# # 由于clicked信号会默认发射一个参数False(0) ,所以lambda中需要增加一个"_"变量来忽略这个参数(或者添加一个变量接收这个参数,后面不用)
# ****************获取数据****************** 结束
pass # 数据条目限制
# ****************数据条目限制****************** 开始
# cb.setMaxCount(20)
# cb.setMaxVisibleItems(15)
#
# ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
# '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
# '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
# for i, v in enumerate(ls):
# cb.addItem(v, i * 10)
# ****************数据条目限制****************** 结束
pass # 常规操作
# ****************常规操作****************** 开始
# ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
# '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
# '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
# for i, v in enumerate(ls):
# cb.addItem(v, i * 10)
#
# cb.setEditable(True) # 选中条目是否允许被编辑
# cb.setDuplicatesEnabled(False) # 可编辑条目重复时,是否允许被追加到下拉框中
# cb.setFrame(False) # 是否显示边框
# # cb.setItemIcon(0, QIcon('../images/jpg/home.jpg')) # 设置条目图标
# # cb.setItemIcon(1, QIcon('../images/jpg/edit.jpg')) # 设置条目图标
# # cb.setIconSize(QSize(100, 100)) # 统一设置图标尺寸
# cb.setSizeAdjustPolicy(QComboBox.AdjustToContents) # 设置下拉框尺寸调整策略
# cb.setMinimumContentsLength(10) # 设置最小内容长度
# ****************常规操作****************** 结束
pass # 其他操作
# ****************其他操作****************** 开始
# ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
# '湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
# '宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
# for i, v in enumerate(ls):
# cb.addItem(v, i * 10)
#
# cb.setEditable(True)
# btn.setText('清除所有条目')
# btn2.setText('清除编辑条目')
# btn.clicked.connect(lambda :cb.clear()) # 清除所有条目
# btn2.clicked.connect(lambda :cb.clearEditText()) # 清除当前编辑条目
# btn.setText('弹出下拉框')
# btn.clicked.connect(lambda :cb.showPopup())
# cp = QCompleter(['Fengzi','Shixinfeng','aaa','bbb','ababa'])
# cb.setCompleter(cp) # 完成器
# vld = QValidator
# cb.setValidator(vld)
# ****************其他操作****************** 结束
pass # 可用信号
# ****************可用信号****************** 开始
ls = ['河北', '山西', '黑龙江', '吉林', '辽宁', '江苏', '浙江', '安徽', '福建', '江西', '山东', '河南', '湖北', \
'湖南', '广东', '海南', '四川', '贵州', '云南', '陕西', '甘肃', '青海', '台湾', '内蒙古', '广西', '西藏', \
'宁夏', '新疆', '北京', '天津', '上海', '重庆', '香港', '澳门']
for i, v in enumerate(ls):
cb.addItem(v, i * 10)
# cb.setEditable(True) # 选中条目是否允许被编辑
# cb.activated.connect(lambda val:print('选中条目发生了改变',val))
# cb.activated[str].connect(lambda val:print('选中条目发生了改变',val))
#
# cb.currentIndexChanged.connect(lambda val: print('当前选中的索引发生了改变',val))
# cb.currentIndexChanged[str].connect(lambda val: print('当前选中的索引发生了改变',val))
#
# cb.currentTextChanged.connect(lambda val: print('选中文本发生了改变', val))
#
# cb.editTextChanged.connect(lambda val:print('可编辑文本发生了改变', val))
#
# btn.clicked.connect(lambda :cb.setItemText(0, '测试一下'))
btn2.clicked.connect(lambda :cb.setCurrentIndex(2))
# cb.highlighted.connect(lambda val:print('高亮显示', val))
# cb.highlighted[str].connect(lambda val:print('高亮显示', val))
cb.textHighlighted.connect((lambda val:print('text高亮', val)))
# ****************可用信号****************** 结束
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QComboBox-二级联动')
self.resize(500, 500)
self.pro_dic = {'湖南':
{'长沙':'001001',
'株洲':'001002',
'湘潭':'001003',
'衡阳':'001004',
'邵阳':'001005',
'岳阳':'001006',
'张家界': '001007',
'益阳': '001008',
'常德': '001009',
'娄底': '001010',
'郴州': '001011',
'永州': '001012',
'怀化': '001013'
},
'北京':{'东城区':'002001',
'西城区':'002002',
'朝阳区':'002003',
'丰台区':'002004',
'石景山区':'002005',
'海淀区':'002006',
'顺义区':'002007',
'通州区':'002008',
'大兴区':'002009',
'房山区':'002010',
'门头沟区':'002011',
'昌平区':'002012',
'平谷区':'002013',
'密云区':'002014',
'怀柔区':'002015',
'延庆区':'002016'},
'广东':{'广州':'003001',
'深圳':'003002',
'珠海':'003003',
'汕头':'003004',
'佛山':'003005',
'韶关':'003006',
'湛江':'003007',
'肇庆':'003008',
'江门':'003009',
'茂名':'003010',
'惠州':'003011',
'梅州':'003012',
'汕尾':'003013',
'河源':'003014',
'阳江':'003015',
'清远':'003016',
'东莞':'003017',
'中山':'003018',
'潮州':'003019',
'揭阳':'003020'}
}
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
cb_province = QComboBox(self)
cb_city = QComboBox(self)
self.cb_province = cb_province
self.cb_city = cb_city
cb_province.resize(150, 30)
cb_city.resize(150, 30)
x = 10
y = 10
cb_province.move(x, y)
cb_city.move(cb_province.x()+cb_province.width()+5, cb_province.y())
# 省份发生变化时触发信号,联动城市下拉框
cb_province.currentIndexChanged[str].connect(self.pro_changed)
# 城市发生变化时触发信号,打印城市对应的ID
self.cb_city.currentIndexChanged.connect(self.city_changed)
# 给省份下拉框控件添加数据
cb_province.addItems(self.pro_dic.keys())
def pro_changed(self,pro_name):
self.cb_city.blockSignals(True) # 取消城市下拉框发射信号
# 清空城市下拉框条目
self.cb_city.clear()
self.cb_city.blockSignals(False) # 恢复城市下拉框发射信号
# 城市下拉框控件添加省份对应城市和ID
for key,val in self.pro_dic[pro_name].items():
self.cb_city.addItem(key, val)
def city_changed(self, city_index):
# 获取城市ID
city_id = self.cb_city.itemData(city_index)
print(city_id)
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())
from PyQt5.Qt import *
import sys
class Windows(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle('QFontComboBox-创建使用')
self.resize(500, 500)
self.widget_list()
def widget_list(self):
self.add_widget()
def add_widget(self):
labe = QLabel(self)
labe.setText("我喜欢学习Python编程!")
labe.move(20, 50)
fcb = QFontComboBox(self)
fcb.setEditable(False) # 设置选中条目不可被编辑
fcb.move(20, 100)
# ****************设置过滤器****************** 开始
fcb.setFontFilters(QFontComboBox.AllFonts) # 显示所有字体
# fcb.setFontFilters(QFontComboBox.ScalableFonts) # 显示可缩放字体
# fcb.setFontFilters(QFontComboBox.NonScalableFonts) # 显示不可缩放的字体
# fcb.setFontFilters(QFontComboBox.MonospacedFonts) # 显示等宽字体
# fcb.setFontFilters(QFontComboBox.ProportionalFonts) # 显示比例字体
# ****************设置过滤器****************** 结束
# ****************可用信号****************** 开始
# 当前字体发生改变时发生信号,传递一个QFont对象
fcb.currentFontChanged.connect(lambda font:labe.setFont(font))
# 当前索引号发生改变时发射信号,传递条目索引号
fcb.currentIndexChanged.connect(lambda index:print('index发生了改变',index))
# (重载)当前索引号发生改变时发射信号,传递条目显示文本
fcb.currentIndexChanged[str].connect(lambda s:print('index发生了改变',s))
# ****************可用信号****************** 结束
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Windows()
window.show()
sys.exit(app.exec_())