返回顶部

[Python] [PyQt5]QComboBox控件组合的按钮和弹出列表选项列表使用

[复制链接]
awagink 显示全部楼层 发表于 2021-1-4 21:09:08 |阅读模式 打印 上一主题 下一主题
上期我们进行了TIM的模拟,主要涉及到QTreeWidget方面的知识。



今天我们一起通过两个小例子来学习一下QComboBox类。



总体介绍
QComboBox小部件是一个组合的按钮和弹出列表。

QComboBox提供了一种向用户呈现选项列表的方式,其占用最小量的屏幕空间。

组合框是一个显示当前项目的选择小部件,可以弹出可选项目列表。组合框可以是可编辑的,允许用户修改列表中的每个项目。

组合框可以包含图像以及字符串; 当然insertItem()和setItemText()函数需要适当重载。对于可编辑组合框,提供了函数clearEditText(),以清除显示的字符串而不更改组合框的内容。

如果组合框的当前项目发生更改,则会发出两个信号currentIndexChanged()和activated()。无论以编程方式或通过用户交互完成更改,currentIndexChanged()总是被发射,而只有当更改是由用户交互引起时才activated() 。highlighted()信号在用户突出显示组合框弹出列表中的项目时发出。所有三个信号都有两个版本,一个带有str参数,另一个带有int参数。如果用户选择或突出显示一个图像,则只会发出int信号。每当可编辑组合框的文本发生改变时,editTextChanged()信号就会发出。

当用户在可编辑的组合框中输入一个新的字符串时,该小部件可能会插入它,也可能不会插入它,并且可以将它插入到多个位置。默认策略是InsertAtBottom,但您可以使用setInsertPolicy()更改它。

可以使用QValidator将输入约束为可编辑的组合框;请参阅setValidator()。默认情况下,接受任何输入。

例如,可以使用插入函数insertItem()和insertItems()来填充组合框。可以使用setItemText()更改项目。一个项目可以使用removeItem()来移除,所有项目都可以使用clear()来移除。当前项目的文本由currentText()返回,项目的文本编号使用text()返回。当前项目可以使用setCurrentIndex()来设置。 count()返回组合框中的项目数;可以用setMaxCount()设置项目的最大数量。您可以允许使用setEditable()进行编辑。对于可编辑组合框,您可以使用setCompleter()设置自动完成,并且用户是否可以添加重复项由setDuplicatesEnabled()进行设置。

QComboBox为其弹出列表使用模型/视图框架并存储其项目。默认情况下,QStandardItemModel存储项目,QListView子类显示弹出列表。您可以直接访问模型和视图(使用model()和view()),但QComboBox还提供了设置和获取项目数据的函数(例如,setItemData()和itemText())。您还可以设置新的模型和视图(使用setModel()和setView())。对于组合框标签中的文本和图标,将使用具有Qt.DisplayRole和Qt.DecorationRole的模型中的数据。请注意,您不能通过使用setSelectionMode()来更改view()的SelectionMode。

类归属
PyQt5->QtWidgets->QComboBox

继承关系
PyQt5->QObject and QPaintDevice->QWidget->QFontComboBox->QComboBox

更多详细的介绍,请参见官网:
https://doc.qt.io/qt-5/qcombobox.html

小例子

PyQt5-QComboBox控件使用
QComboBox 中addItem("")添加单个选项; addItems(列表)添加多个选项;
1499671-20181204100147417-1104651054.png
例如:下面实现省市级联效果如下:

  1. #QComboBox下拉列表控件使用,省市级联
  2. from PyQt5.QtWidgets import  QPushButton,QVBoxLayout,QWidget,QApplication,QRadioButton,QHBoxLayout,QCheckBox,QGroupBox,QComboBox
  3. from PyQt5.QtGui import QIcon,QPixmap
  4. from PyQt5.QtCore import  Qt

  5. import sys

  6. class WindowClass(QWidget):

  7.     def __init__(self,parent=None):
  8.         self.citys = {"北京": ["北京"], "上海": ["上海"], "河北省": ["石家庄", "邯郸"]}
  9.         super(WindowClass, self).__init__(parent)
  10.         layout=QVBoxLayout()
  11.         self.comboBox_1=QComboBox()
  12.         self.comboBox_1.addItem("--请选择--")
  13.         self.comboBox_1.addItem("北京")
  14.         self.comboBox_1.addItem("上海")
  15.         self.comboBox_1.addItem("河北省")
  16.         self.comboBox_1.addItems(["湖南省","湖北省","天津"])

  17.         self.comboBox_2 = QComboBox()
  18.         self.comboBox_2.addItem("--请选择--")

  19.         layout.addWidget(self.comboBox_1)
  20.         layout.addWidget(self.comboBox_2)
  21.         self.comboBox_1.currentIndexChanged.connect(self.btnState)

  22.         self.setLayout(layout)
  23.     def btnState(self):
  24.         print("状态:",self.comboBox_1.currentText())
  25.         # for count in range(self.comboBox_1.count()):
  26.         #     print("列表选项:" ,self.comboBox_1.itemText(count),count)

  27.         province=self.comboBox_1.currentText()
  28.         print(province in  self.citys.keys())
  29.         if province!="--请选择--":
  30.             self.comboBox_2.clear()
  31.             self.comboBox_2.addItems(self.citys[province] if   province in  self.citys.keys() else ["--请选择--"])
  32.         else:
  33.             self.comboBox_2.clear()
  34.             self.comboBox_2.addItem("--请选择--")



  35. if __name__=="__main__":
  36.     app=QApplication(sys.argv)
  37.     win=WindowClass()
  38.     win.show()
  39.     sys.exit(app.exec_())
复制代码


注:这里的代码self.comboBox_1.currentText()可以调用当前激活的文本,self.comboBox_1.itemText(count)可以调用comboBox列表
print("状态:",self.comboBox_1.currentText())
        # for count in range(self.comboBox_1.count()):
        #     print("列表选项:" ,self.comboBox_1.itemText(count),count)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

纳速健身网成立于2006年8月,是国内优秀健身运动网站,现拥浏览人数超30万。网站是集养生、武术、太极拳和健身气功等多种健身项目于一体的多功能交流平台。平台提供大量优质的教学视频、伴奏音乐(太极拳晨练音乐,广场舞音乐,健身气功音乐)、图文教程、运动科普和经验分享,为健身爱好者提供完善的运动指导平台。
  • 纳速QQ群乙:151815303
  • 纳速QQ群丙:79104490
  • 微信交流群:微信好友搜索【nasuwang】加小纳微信进群交流健身知识,备注【纳速】
  •                     或者扫描页面底部右侧二维码添加小纳微信>>>
  • 微信公众号

  • 微信群客服交流

  • Copyright © 2006-2021, 纳速健身网. | | 辽ICP备13002388号-1 辽公安网备21050202000005号公安网备号 纳速武术-乙 QQ