PyQt QComboBox
最后修改于 2023 年 8 月 24 日
在本文中,我们将展示如何使用 QComboBox 部件。
访问 PyQt6 教程,或列出所有 PyQt 教程。
,阅读PyQt QComboBox
QComboBox
是一个为用户提供选项列表的部件,它以占用最少屏幕空间的方式工作。组合框是一个显示当前项目的选择部件。它可以弹出一个可选项目的列表。
组合框可以是可编辑的,也可以包含图标。
当用户在组合框中选择一个项目时,会发出 activated
信号。
QComboBox 示例
下面的示例在旁边的标签中显示了选定的项目。
simple.py
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QLabel, QHBoxLayout, QComboBox, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): self.distros = ['Debian', 'Xubuntu', 'Fedora', 'Arch', 'Gentoo'] hbox = QHBoxLayout() self.lbl = QLabel('Ubuntu', self) combo = QComboBox(self) for distro in self.distros: combo.addItem(distro) combo.activated.connect(self.onActivated) hbox.addWidget(combo) hbox.setSpacing(20) hbox.addWidget(self.lbl) self.setContentsMargins(20, 20, 20, 20) self.setLayout(hbox) self.move(300, 300) self.setWindowTitle('QComboBox') self.show() def onActivated(self, idx): self.lbl.setText(self.distros[idx]) self.lbl.adjustSize() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
我们有一个组合框和一个标签。选中的项目会显示在标签中。
combo = QComboBox(self) for distro in self.distros: combo.addItem(distro)
使用 addItem
添加一个新项目。
combo.activated.connect(self.onActivated)
我们将 self.onActivated
处理程序连接到 activate
信号。
def onActivated(self, idx): self.lbl.setText(self.distros[idx]) self.lbl.adjustSize()
在事件处理程序中,我们将选定的文本设置到标签上,并调整标签的大小以适应文本。

QComboBox 图标
在下面的示例中,我们在组合框中显示带有文本的图标。
icons.py
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QHBoxLayout, QComboBox, QApplication) from PyQt6.QtGui import QIcon class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() combo = QComboBox(self) combo.addItem('Disk') combo.setItemIcon(0, QIcon('disk.png')) combo.addItem('Web') combo.setItemIcon(1, QIcon('web.png')) combo.addItem('Computer') combo.setItemIcon(2, QIcon('computer.png')) hbox.addWidget(combo) hbox.setSpacing(20) self.setContentsMargins(20, 20, 20, 20) self.setLayout(hbox) self.setGeometry(300, 300, 250, 180) self.setWindowTitle('QComboBox') self.show() def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
图标通过 setItemIcon
方法设置。

QComboBox 查找文本
findItemText
方法返回包含给定文本的项目的索引。如果未找到文本,则返回 -1。
finding.py
#!/usr/bin/python import sys from PyQt6.QtWidgets import (QWidget, QLineEdit, QHBoxLayout, QPushButton, QComboBox, QApplication) class Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self): hbox = QHBoxLayout() data = ['sky', 'cloud', 'grass', 'water', 'glass', 'forest', 'rock', 'light', 'brittle', 'water', 'smoke'] self.combo = QComboBox(self) self.combo.setMinimumWidth(90) self.combo.addItems(data) self.lineEdit = QLineEdit() self.lineEdit.setMinimumWidth(90) btn = QPushButton("Find") btn.clicked.connect(self.onClicked) hbox.addWidget(self.combo) hbox.setSpacing(20) hbox.addWidget(self.lineEdit) hbox.setSpacing(20) hbox.addWidget(btn) self.setContentsMargins(20, 20, 20, 20) self.setLayout(hbox) self.move(300, 300) self.setWindowTitle('QComboBox') self.show() def onClicked(self): data = self.lineEdit.text() idx = self.combo.findText(data) if idx != -1: self.combo.setCurrentIndex(idx) def main(): app = QApplication(sys.argv) ex = Example() sys.exit(app.exec()) if __name__ == '__main__': main()
在此示例中,我们有一个组合框、一个行编辑器和一个按钮。我们搜索在行编辑器中输入的指定文本。如果找到了项目文本,它将作为当前文本项显示。
data = ['sky', 'cloud', 'grass', 'water', 'glass', 'forest', 'rock', 'light', 'brittle', 'water', 'smoke'] self.combo = QComboBox(self) self.combo.setMinimumWidth(90) self.combo.addItems(data)
多个项目通过 addItems
插入。
def onClicked(self): data = self.lineEdit.text() idx = self.combo.findText(data) if idx != -1: self.combo.setCurrentIndex(idx)
当我们点击按钮时,onClicked
处理程序被调用。我们使用 text
获取输入的文本。然后我们找到具有该文本的项目的索引。最后,我们使用 setCurrentIndex
设置当前项目。
在本文中,我们介绍了 PyQt 的 QComboBox
部件。
作者
列出所有 PyQt 教程。