QListWidget增加角标
时间: 2024-01-16 12:05:43 浏览: 85
ListTestWgt.zip
可以通过继承QStyledItemDelegate类来实现QListWidget的角标功能。下面是一个简单的示例代码:
```python
from PyQt5.QtGui import QPainter, QColor, QIcon
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QListWidget, QListWidgetItem, QStyledItemDelegate, QWidget
class BadgeDelegate(QStyledItemDelegate):
def __init__(self, parent=None, badge=None):
super().__init__(parent)
self.badge = badge
def paint(self, painter: QPainter, option, index):
super().paint(painter, option, index)
if self.badge:
badge_text = str(self.badge)
badge_rect = option.rect.adjusted(option.rect.width() - 20, 0, 0, 0)
painter.setBrush(QColor("red"))
painter.drawEllipse(badge_rect)
painter.setPen(QColor("white"))
painter.drawText(badge_rect, Qt.AlignCenter, badge_text)
class MainWindow(QWidget):
def __init__(self):
super().__init__()
self.list_widget = QListWidget(self)
self.list_widget.setItemDelegate(BadgeDelegate(badge=3))
self.list_widget.setIconSize(Qt.SizeHint(40, 40))
self.list_widget.setViewMode(QListWidget.IconMode)
icon = QIcon("icon.png")
for i in range(10):
item = QListWidgetItem(icon, f"Item {i}", self.list_widget)
item.setSizeHint(Qt.SizeHint(60, 60))
item.setData(Qt.UserRole, i)
self.setGeometry(100, 100, 400, 400)
if __name__ == '__main__':
app = QApplication([])
window = MainWindow()
window.show()
app.exec()
```
在这个示例中,我们创建了一个QListWidget,并将其视图模式设置为图标模式。我们使用QListWidgetItem添加了一些图标和文本到列表中。我们还使用QStyledItemDelegate类的子类BadgeDelegate来绘制角标。在paint函数中,我们绘制了一个红色的圆形,并在其上绘制了一个白色的文本角标。我们可以在BadgeDelegate类的构造函数中传递一个整数值来设置角标的值。
运行这个示例代码,你会看到每个图标旁边都有一个红色的角标,显示数字3。你可以更改BadgeDelegate类的构造函数中的值来更改角标的值,并且可以根据需要修改paint函数来更改角标的外观和位置。
阅读全文