7.5 QComboBox下拉框控件
作者:互联网
一、QComboBox下拉框控件
1.基本概念
- QComboBox下拉框控件也属于另一种样式的组合控件
2.代码
点击查看代码
from PyQt5.Qt import *
import sys
class Window(QWidget) :
def __init__(self) :
super().__init__()
self.setWindowTitle("QComboBox下拉框控件 - PyQt5中文网")
self.resize(600, 500)
self.func_list()
def func_list(self) :
self.func()
def func(self) :
self.qcb = QComboBox(self)
self.qcb.move(150, 150)
self.qcb.resize(150, 40)
self.btn = QPushButton('按钮', self)
self.btn.resize(60, 30)
self.btn.move(150, 250)
self.btn.pressed.connect(self.test) #点击按钮,促发槽函数
def test(self) :
# 增加条目
self.qcb.addItem('PyQt5中文网')
self.qcb.addItem(QIcon('aaa.png'), 'pyqt5视频教程')
self.qcb.addItems(['pyqt', 'pyqt5', 'python', 'django']) # 数组 (多个条目添加)
self.qcb.addItems(('pyqt', 'pyqt5', 'python', 'django')) # 元祖 (多个条目添加)
# 1插入条目(第一个数字位置:插入的位置->从0开始,第二个位置:插入的内容)
self.qcb.insertItem(1, 'PyQt5中文网')
self.qcb.insertItem(3, QIcon('aaa.png'), 'pyqt5视频教程')
self.qcb.insertItems(2, ['pyqt','pyqt5','python','django'])
# 2设置条目,可以修改指定位置的图标和标题
self.qcb.setItemIcon(2, QIcon('aaa.png'))
self.qcb.setItemText(3, 'django')
# self.qcb.setItemData(2, QIcon('123.jpg')) # 用户数据(获取来的)
# 3删除条目
self.qcb.removeItem(2)
# 插入分割线
self.qcb.insertSeparator(2)
# 下拉框默认值设定
#self.qcb.setCurrentIndex(2) # 通过匹配索引设置下拉框默认值
#self.qcb.setCurrentText('python') # 通过匹配下拉框字符串设置下拉框默认值
self.qcb.setEditable(True) # 文本可编辑,并可添加
self.qcb.setEditText('pyqt') # 让下拉框中文本可以被编辑,首先要设置成可编辑
# # 数据获取
# self.qcb.addItem(QIcon('123.jpg'), 'python', {'name', 'PyQt5'}) #获取字典的名字和值
print(self.qcb.count()) # 条目个数
print(self.qcb.itemIcon(3)) # 指定条目图片对象
# print(self.qcb.itemIcon(self.qcb.currentIndex())) # 指定索引的图片对象
print(self.qcb.itemText(3)) # 指定条目标题
# print(self.qcb.itemData(0)) # 指定条目数据{'name', 'PyQt5'}
print(self.qcb.currentIndex()) # 当前索引
print(self.qcb.currentText()) # 当前文本
# print(self.qcb.currentData()) # 返回当前数据{'name', 'PyQt5'}
# # 下拉框数据个数限制
self.qcb.setMaxCount(21) # 设置最大存储条目个数
self.qcb.setMaxVisibleItems(20) # 设置最大可见的条目个数
# 可重复
self.qcb.setEditable(True) #编辑文本框后,点击enter,之后文本框会添加该条目
self.qcb.setDuplicatesEnabled(False) # 条目中不能出现两个或多个重复数据 (若不重复就会添加,重复就不会添加)
# 有边框
self.qcb.setFrame(False)
# 图标尺寸
self.qcb.setIconSize(QSize(20, 20))
# # 尺寸调整策略
# QComboBox.AdjustToContents
# QComboBox.AdjustToMinimumContentsLength
# QComboBox.AdjustToContentsOnFirstShow # 默认值
# QComboBox.AdjustToMinimumContentsLengthWithIcon
self.qcb.setSizeAdjustPolicy(QComboBox.AdjustToMinimumContentsLength) # 调整下拉框宽度
# # 清空
# self.qcb.clear() # 清空下拉内容
# self.qcb.clearEditText() # 清空被编辑的内容
#self.qcb.showPopup() # 自动弹出下拉框
# # 下拉匹配(会自动根据输入的元素进行匹配)
self.qcb.setCompleter(QCompleter(['pyqt', 'pyqt5', 'python', 'django']))
# # 可用信号
# self.qcb.activated() # 某个条目被用户选中,
# self.qcb.currentIndexChanged() # 当前选中条目索引发生改变
# self.qcb.currentTextChanged() # 当前选中条目文本发生变化
# self.qcb.editTextChanged() # 编辑文本时
# self.qcb.highlighted() # 高亮==鼠标停留产生的高亮
# # self.qcb.activated.connect(lambda val: print(val))
# # self.qcb.activated[str].connect(lambda val: print(val))
# # self.qcb.currentIndexChanged.connect(lambda val: print(val))
# # self.qcb.currentIndexChanged[str].connect(lambda val: print(val))
# # self.qcb.setEditable(True)
# # self.qcb.editTextChanged.connect(lambda val: print(val))
self.qcb.highlighted.connect(lambda val : print(val))
pass
if __name__ == '__main__' :
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
4.案例
点击查看代码
from PyQt5.Qt import *
import sys
class Window(QWidget) :
def __init__(self) :
super().__init__()
self.setWindowTitle("QComboBox下拉框案例 - PyQt5中文网")
self.resize(600, 500)
self.city_dic = {
'江苏省' : {
'南京' : '025',
'徐州市' : '0516',
'淮安市' : '0517',
'盐城市' : '0515',
'扬州市' : '0514',
'苏州市' : '0512',
},
'浙江省' : {
'杭州市' : '0571',
'宁波市' : '0574',
'金华市' : '0579',
'舟山市' : '0580',
'温州市' : '0577',
'台州市' : '0576',
},
'安徽省' : {
'合肥市' : '0551',
'滁州市' : '0550',
'宿州市' : '0557',
'巢湖市' : '0565',
'黄山市' : '0559',
'宣州市' : '0563',
},
'河北省' : {
'石家庄市' : '0311',
'邯郸市' : '0310',
'保定市' : '0312',
'唐山市' : '0315',
'沧州市' : '0317 ',
'衡水市' : '0318',
'邢台市' : '0319',
},
}
self.func_list()
def func_list(self) :
self.func()
def func(self) :
self.qcb1 = QComboBox(self)
self.qcb1.move(100, 150)
self.qcb1.resize(100, 40)
self.qcb2 = QComboBox(self)
self.qcb2.move(240, 150)
self.qcb2.resize(100, 40)
# 1.获取省一级,这里要先链接信号,然后添加数据,数据从无到有也能触发信号
# self.qcb1.addItems(self.city_dic.keys())
self.qcb1.currentIndexChanged[str].connect(self.qcb1_changed)
self.qcb1.addItems(self.city_dic.keys())
# 2.获得当前选中省的名称
self.qcb1_changed(self.qcb1.currentText())
# 4.城市区号获取方法
self.qcb2.currentIndexChanged[int].connect(self.qcb2_changed)
self.qcb2_changed(self.qcb2.currentIndex())
def qcb1_changed(self, name) :
# print(name)
# 3.根据省的名称到字典中查找下级城市名称
citys = self.city_dic[name]
# print(citys)
# 从字典中获取下级城市名称到下一个下拉框中
'''
# self.qcb2.addItems(citys.keys()) # 这只会追加城市,所以要清空之前的数据,在重新添加条目
self.qcb2.clear()
# self.qcb2.addItems(citys.keys())
'''
self.qcb2.blockSignals(True)
self.qcb2.clear() # 这里会出现None结果,参考97行代码
self.qcb2.blockSignals(False)
for key, val in citys.items() : # 通过增加val数据来获取
self.qcb2.addItem(key, val)
# print(citys.items())
def qcb2_changed(self, num) : # 这里传入条目的索引值
# print(num) # 这里值为-1,会打印None
print(self.qcb2.itemData(num))
# 这里注意itemData()的用法
if __name__ == '__main__' :
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
标签:qcb2,控件,self,QComboBox,条目,qcb,print,下拉框 来源: https://www.cnblogs.com/yuyingblogs/p/16133703.html