Python PyQt5下拉多选框实现示例

半杯拿铁
半杯拿铁
发布时间:2026-10-11| 2人浏览过
原创

本文详细介绍如何在PyQt5中实现支持多选的动态下拉菜单。通过组合QComboBox与QListWidget视图,并在列表中嵌入QCheckBox控件,即可快速构建具备选中状态管理与事件响应的自定义下拉组件,附完整源代码与UI演示。

QComboBox基础使用

QComboBox是PyQt5中常用的下拉列表控件,它将按钮和可点击的下拉选项结合在一起,适用于单项选择场景。它提供了丰富的接口用于增删改查项:

  • addItem() / addItems():添加单个或批量下拉选项
  • clear():清空所有选项
  • count():返回选项总数
  • currentText() / currentIndex():获取当前选中文本及索引
  • itemText(i):获取指定索引项的文本

常用信号包括 activated(用户确认选中时触发)和 currentIndexChanged()(索引变更时触发)。

第一步:初始化基本下拉框

首先创建一个继承自QWidget的主窗口类,布局使用QVBoxLayout垂直排列控件。初始化时实例化QComboBox,绑定 currentIndexChanged 信号以便实时捕获用户交互。

PyQt5 QComboBox下拉菜单基础运行界面
运行后可见标准单选下拉列表与下方文本显示区域
import sys
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from PyQt5.QtWidgets import *

class ComboxDemo(QWidget):
    def __init__(self, parent=None):
        super(ComboxDemo, self).__init__(parent)
        self.setWindowTitle("combox 例子")
        self.resize(300, 90)
        layout = QVBoxLayout()
        self.lbl = QLabel("")

        self.cb = QComboBox()
        self.cb.addItem("C")
        self.cb.addItem("C++")
        self.cb.addItems(["Java", "C#", "Python"])
        self.cb.currentIndexChanged.connect(self.selectionchange)
        layout.addWidget(self.cb)
        layout.addWidget(self.lbl)
        self.setLayout(layout)

    def selectionchange(self, i):
        self.lbl.setText(self.cb.currentText())
        self.lbl.adjustSize()
        print("Items in the list are :")
        for count in range(self.cb.count()):
            print('item' + str(count) + '=' + self.cb.itemText(count))
            print("Current index", i, "selection changed ", self.cb.currentText())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    comboxDemo = ComboxDemo()
    comboxDemo.show()
    sys.exit(app.exec_())

实现下拉多选功能

QComboBox原生不支持多选。要实现类似网页端Select的多选下拉效果,核心思路是将QComboBox的视图替换为带有复选框(QCheckBox)的列表控件(QListWidget)。当用户在下拉列表中勾选项目后,可通过回调收集所有被选中的项。

第二步:配置多选视图与模型

在 ComboCheckBox 类的构造函数中,定义选项名称列表。遍历该列表创建对应的 QCheckBox 实例,并将其添加到自定义的 QListWidget 中。随后将 QListWidget 的模型和视图分别赋予 QComboBox,从而接管下拉面板的渲染。

PyQt5下拉多选框展开后的复选框列表界面
展开下拉框后显示可独立勾选的复选框列表
from PyQt5.QtWidgets import QComboBox, QListWidgetItem, QListWidget, QCheckBox, \
  QApplication, QVBoxLayout, QWidget,QPushButton,QHBoxLayout,QLineEdit
import sys

class ComboCheckBox(QWidget):
  def __init__(self, parent=None):
        super(ComboCheckBox, self).__init__(parent)

        self.items = ['语文', '数学', '英语', '体育']
        self.box_list = []
        self.comb = QComboBox(self) #列表框QComboBox
        self.listwidget = QListWidget(self) #(列表控件)

        for i in range(len(self.items)):
            self.box_list.append(QCheckBox(self))
            self.box_list[i].setText(self.items[i])
            item = QListWidgetItem(self.listwidget)
            self.listwidget.setItemWidget(item, self.box_list[i])
            # QComboBox添加模型和视图,QListWidget设置为QComboBox的View,QListWidget的Model设置为QComboBox的Model
        self.comb.setModel(self.listwidget.model())
        self.comb.setView(self.listwidget)

        self.btn = QPushButton('选择', self)
        self.btn.clicked.connect(self.get_selected)
        self.line=QLineEdit()
        #布局
        layout = QVBoxLayout()
        layout.addWidget(self.btn)
        layout.addWidget(self.comb)
        layout.addWidget(self.line)
        self.setLayout(layout)

  def get_selected(self):
      ret = []
      for i in range(len(self.items)):
          if self.box_list[i].isChecked():
              ret.append(self.box_list[i].text())
      self.line.setText(str(ret))


if __name__ == "__main__":
  app = QApplication(sys.argv)
  ui = ComboCheckBox()
  ui.show()
  sys.exit(app.exec_())

第三步:监听并提取选中结果

用户完成勾选后,触发按钮的点击事件进入 get_selected 方法。该方法遍历之前保存的 box_list,利用 isChecked() 判断每个复选框的状态。将状态为 True 的复选框文本追加至列表,并最终通过 QLineEdit 显示在界面上。

PyQt5下拉多选框点击选择按钮后的结果展示界面
点击按钮后,选中的科目以字符串形式显示在输入框内

上述逻辑确保了多选数据的准确捕获与反馈。开发时需注意,此方案依赖于将自定义部件作为子项插入列表,因此必须妥善管理生命周期以避免内存泄漏。

以上就是Python PyQt5下拉多选框的实现详细内容,更多关于PyQt5 GUI界面开发技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。