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 教程。