赞
踩
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_())
- from PyQt5.Qt import *
- import sys
-
-
- class MyTest(QWidget):
- def __init__(self):
- super(MyTest, self).__init__()
- self.items = ['item1', 'item2', 'item3', '张三', '李四', '王五']
- self.resize(200, 100)
- self.test()
-
- def test(self):
- cmb = QComboBox(self)
- self.cmb = cmb
- cmb.resize(100, 50)
- cmb.setEditable(True)
- cmb.setDuplicatesEnabled(False)
-
- # 给下拉选择框添加下拉选项
- cmb.addItems(self.items)
-
- # 下拉框编辑文本发生改变时触发事件
- cmb.editTextChanged.connect(self.cmb_textchanged)
-
- layout = QHBoxLayout()
- layout.addWidget(cmb)
- self.setLayout(layout)
-
- def cmb_textchanged(self, newtxt):
- commpleter = QCompleter(self.items, self.cmb)
- self.cmb.setCompleter(commpleter)
-
-
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- win = MyTest()
-
- win.show()
- sys.exit(app.exec_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。