Files
fluent_widgets_pyside6/examples/status_info/info_badge/demo.py

96 lines
3.5 KiB
Python
Raw Normal View History

2025-08-14 18:45:16 +08:00
# 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()