个人技术分享

pyqt QListWidget控件与QListView控件对比

  • QListWidget
  • QListView
  • 效果
    • QListWidget效果
    • QListWidget使用代码
    • QListView 效果
    • QListView代码
  • 总结

QListWidget

QListWidget 是一个结合了 QListView 和一个标准模型(QStringListModel)的控件。这使得 QListWidget 非常适合于简单的列表应用,因为它隐藏了模型/视图架构的复杂性。你可以直接通过 QListWidget 添加、插入和删除 QListWidgetItem

QListView

QListView 是一个视图控件,它使用模型/视图架构来显示数据。这意味着**你需要一个模型(如 QStringListModel 或自定义模型)**来提供数据给 QListView。QListView 本身不存储数据,它只是数据的可视化表示。这使得 QListView 在需要自定义数据表示或更复杂的交互时更加灵活。

效果

QListWidget效果

在这里插入图片描述

QListWidget使用代码

import sys
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QWidget, QVBoxLayout


class QListWidgetExample(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.listWidget = QListWidget(self)

        # 添加 QListWidgetItem 到 QListWidget
        for i in range(5):
            item = QListWidgetItem(f"Item {i + 1}")
            self.listWidget.addItem(item)

            # 设置布局
        layout = QVBoxLayout(self)
        layout.addWidget(self.listWidget)

        # 设置窗口标题和大小
        self.setWindowTitle('QListWidget Example')
        self.setGeometry(100, 100, 300, 200)


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

QListView 效果

在这里插入图片描述

QListView代码

from PyQt5.QtWidgets import QApplication, QListView, QVBoxLayout, QWidget, QPushButton
from PyQt5.QtGui import QStandardItemModel, QStandardItem
from PyQt5.QtCore import Qt


class ListViewExample(QWidget):
    def __init__(self):
        super().__init__()

        # 初始化UI
        self.initUI()

    def initUI(self):
        # 设置布局
        layout = QVBoxLayout(self)

        # 创建一个模型
        self.model = QStandardItemModel(0, 1)  # 0行1列

        # 添加一些数据
        for i in range(50):  # 假设有50条数据
            item = QStandardItem(f"Item {i + 1}")
            self.model.appendRow(item)

            # 设置模型可以排序
        self.model.setSortRole(Qt.DisplayRole)
        self.model.sort(0, Qt.AscendingOrder)

        # 创建一个视图并设置模型
        self.view = QListView()
        self.view.setModel(self.model)

        # 添加视图到布局
        layout.addWidget(self.view)

        # 可选:添加一个按钮以触发排序
        sort_button = QPushButton("Sort Descending")
        sort_button.clicked.connect(self.sortDescending)
        layout.addWidget(sort_button)

        # 设置窗口标题和大小
        self.setWindowTitle('QListView Example with Sorting')
        self.setGeometry(100, 100, 300, 300)

    def sortDescending(self):
        # 根据第一列降序排序
        self.model.sort(0, Qt.DescendingOrder)


if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)
    ex = ListViewExample()
    ex.show()
    sys.exit(app.exec_())

总结

  • QListWidget 简单易用,适用于快速创建简单的列表。
  • QListView 提供了更多的灵活性和定制性,适合需要更复杂数据表示或交互的场景。