Files
2025-08-14 18:45:16 +08:00

96 lines
3.5 KiB
Python

# coding:utf-8
import sys
from PySide6.QtCore import Qt, QSize, QPoint
from PySide6.QtWidgets import QApplication, QWidget, QHBoxLayout, QVBoxLayout
from qfluentwidgets import (InfoBadge, IconInfoBadge, setTheme, Theme, DotInfoBadge, ToolButton,
InfoBadgePosition, InfoBadgeManager)
from qfluentwidgets import FluentIcon as FIF
@InfoBadgeManager.register('Custom')
class CustomInfoBadgeManager(InfoBadgeManager):
""" Custom info badge manager """
def position(self):
pos = self.target.geometry().center()
x = pos.x() - self.badge.width() // 2
y = self.target.y() - self.badge.height() // 2
return QPoint(x, y)
class Demo(QWidget):
def __init__(self):
super().__init__()
# setTheme(Theme.DARK)
self.vBoxLayout = QVBoxLayout(self)
# info badge
self.hBoxLayout1 = QHBoxLayout()
self.hBoxLayout1.setSpacing(20)
self.hBoxLayout1.setSizeConstraint(QHBoxLayout.SetMinimumSize)
self.hBoxLayout1.addStretch(1)
self.hBoxLayout1.addWidget(InfoBadge.info(1))
self.hBoxLayout1.addWidget(InfoBadge.success(10))
self.hBoxLayout1.addWidget(InfoBadge.attension(100))
self.hBoxLayout1.addWidget(InfoBadge.warning(1000))
self.hBoxLayout1.addWidget(InfoBadge.error(10000))
self.hBoxLayout1.addWidget(InfoBadge.custom('1w+', '#005fb8', '#60cdff'))
self.hBoxLayout1.addStretch(1)
self.vBoxLayout.addLayout(self.hBoxLayout1)
# dot info badge
self.hBoxLayout2 = QHBoxLayout()
self.hBoxLayout2.setSpacing(20)
self.hBoxLayout2.setSizeConstraint(QHBoxLayout.SetMinimumSize)
self.hBoxLayout2.addStretch(1)
self.hBoxLayout2.addWidget(DotInfoBadge.info())
self.hBoxLayout2.addWidget(DotInfoBadge.success())
self.hBoxLayout2.addWidget(DotInfoBadge.attension())
self.hBoxLayout2.addWidget(DotInfoBadge.warning())
self.hBoxLayout2.addWidget(DotInfoBadge.error())
self.hBoxLayout2.addWidget(DotInfoBadge.custom('#005fb8', '#60cdff'))
self.hBoxLayout2.addStretch(1)
self.vBoxLayout.addLayout(self.hBoxLayout2)
# icon info badge
self.hBoxLayout3 = QHBoxLayout()
self.hBoxLayout3.setSpacing(20)
self.hBoxLayout3.setSizeConstraint(QHBoxLayout.SetMinimumSize)
self.hBoxLayout3.addStretch(1)
self.hBoxLayout3.addWidget(IconInfoBadge.info(FIF.ACCEPT_MEDIUM))
self.hBoxLayout3.addWidget(IconInfoBadge.success(FIF.ACCEPT_MEDIUM))
self.hBoxLayout3.addWidget(IconInfoBadge.attension(FIF.ACCEPT_MEDIUM))
self.hBoxLayout3.addWidget(IconInfoBadge.warning(FIF.CANCEL_MEDIUM))
self.hBoxLayout3.addWidget(IconInfoBadge.error(FIF.CANCEL_MEDIUM))
badge = IconInfoBadge.custom(FIF.RINGER, '#005fb8', '#60cdff')
badge.setFixedSize(32, 32)
badge.setIconSize(QSize(16, 16))
self.hBoxLayout3.addWidget(badge)
self.hBoxLayout3.addStretch(1)
self.vBoxLayout.addLayout(self.hBoxLayout3)
# Using an InfoBadge in another control
self.button = ToolButton(FIF.BASKETBALL, self)
self.vBoxLayout.addWidget(self.button, 0, Qt.AlignHCenter)
InfoBadge.success(1, self, target=self.button, position=InfoBadgePosition.TOP_RIGHT)
# NOTE: Use custom info badge manager
# InfoBadge.success(1, self, target=self.button, position='Custom')
self.resize(450, 400)
if __name__ == '__main__':
app = QApplication(sys.argv)
w = Demo()
w.show()
app.exec()