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 提供了更多的灵活性和定制性,适合需要更复杂数据表示或交互的场景。