QListView 设置一行一个颜色
时间: 2024-01-13 21:05:58 浏览: 95
您可以通过重写 QListView 的 paintEvent 函数来实现为每一行设置不同的背景颜色。以下是一个简单的示例代码:
```python
from PyQt5.QtWidgets import QListView, QStyledItemDelegate, QApplication, QMainWindow, QWidget
from PyQt5.QtGui import QStandardItemModel, QStandardItem, QPainter, QBrush
from PyQt5.QtCore import Qt
class ColoredDelegate(QStyledItemDelegate):
def paint(self, painter, option, index):
painter.save()
# 每隔一行设置一种颜色
if index.row() % 2 == 0:
painter.fillRect(option.rect, QBrush(Qt.yellow))
else:
painter.fillRect(option.rect, QBrush(Qt.green))
super().paint(painter, option, index)
painter.restore()
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
self.resize(300, 200)
central_widget = QWidget(self)
self.setCentralWidget(central_widget)
model = QStandardItemModel(10, 1)
for row in range(10):
item = QStandardItem(f'Item {row}')
model.setItem(row, 0, item)
list_view = QListView(central_widget)
list_view.setModel(model)
list_view.setItemDelegate(ColoredDelegate())
list_view.setGeometry(10, 10, 280, 180)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec_()
```
在这个示例中,我们重写了 QStyledItemDelegate 的 paint 函数,根据每行的奇偶性设置不同的背景颜色。然后将这个自定义的委托设置给 QListView,即可实现为每行设置不同颜色的效果。
阅读全文