298 lines
11 KiB
Python
298 lines
11 KiB
Python
# coding:utf-8
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QPixmap, QColor
|
|
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QVBoxLayout
|
|
from qfluentwidgets import (StateToolTip, InfoBadge, ToolTipFilter, PushButton, PixmapLabel,
|
|
InfoBar, InfoBarIcon, FluentIcon, InfoBarPosition, ProgressBar,
|
|
IndeterminateProgressBar, SpinBox, ProgressRing, IndeterminateProgressRing)
|
|
|
|
from .gallery_interface import GalleryInterface
|
|
from ..common.translator import Translator
|
|
|
|
|
|
class StatusInfoInterface(GalleryInterface):
|
|
""" Status info interface """
|
|
|
|
def __init__(self, parent=None):
|
|
t = Translator()
|
|
super().__init__(
|
|
title=t.statusInfo,
|
|
subtitle="qfluentwidgets.components.widgets",
|
|
parent=parent
|
|
)
|
|
self.setObjectName('statusInfoInterface')
|
|
|
|
# state tool tip
|
|
self.stateTooltip = None
|
|
button = PushButton(self.tr('Show StateToolTip'))
|
|
button.clicked.connect(self.onStateButtonClicked)
|
|
self.addExampleCard(
|
|
self.tr('State tool tip'),
|
|
button,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/state_tool_tip/demo.py'
|
|
)
|
|
|
|
# tool tip
|
|
button = PushButton(self.tr('Button with a simple ToolTip'))
|
|
button.installEventFilter(ToolTipFilter(button))
|
|
button.setToolTip(self.tr('Simple ToolTip'))
|
|
self.addExampleCard(
|
|
self.tr('A button with a simple ToolTip'),
|
|
button,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/tool_tip/demo.py'
|
|
)
|
|
|
|
label = PixmapLabel()
|
|
label.setPixmap(QPixmap(':/gallery/images/kunkun.png').scaled(
|
|
160, 160, Qt.KeepAspectRatio, Qt.SmoothTransformation))
|
|
label.installEventFilter(ToolTipFilter(label, showDelay=500))
|
|
label.setToolTip(self.tr('Label with a ToolTip'))
|
|
label.setToolTipDuration(2000)
|
|
label.setFixedSize(160, 160)
|
|
self.addExampleCard(
|
|
self.tr('A label with a ToolTip'),
|
|
label,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/tool_tip/demo.py'
|
|
)
|
|
|
|
# info badge
|
|
w = QWidget()
|
|
w.setLayout(QHBoxLayout())
|
|
w.layout().addWidget(InfoBadge.info(1))
|
|
w.layout().addWidget(InfoBadge.success(10))
|
|
w.layout().addWidget(InfoBadge.attension(100))
|
|
w.layout().addWidget(InfoBadge.warning(1000))
|
|
w.layout().addWidget(InfoBadge.error(10000))
|
|
w.layout().addWidget(InfoBadge.custom('1w+', '#005fb8', '#60cdff'))
|
|
w.layout().setSpacing(20)
|
|
w.layout().setContentsMargins(0, 10, 0, 10)
|
|
self.addExampleCard(
|
|
self.tr('InfoBadge in different styles'),
|
|
w,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/info_bar/demo.py'
|
|
)
|
|
|
|
# short info bar
|
|
infoBar = InfoBar(
|
|
icon=InfoBarIcon.SUCCESS,
|
|
title=self.tr('Success'),
|
|
content=self.tr("The Anthem of man is the Anthem of courage."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
duration=-1,
|
|
position=InfoBarPosition.NONE,
|
|
parent=self
|
|
)
|
|
self.addExampleCard(
|
|
self.tr('A closable InfoBar'),
|
|
infoBar,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/info_bar/demo.py'
|
|
)
|
|
|
|
# long info bar
|
|
content = self.tr("My name is kira yoshikake, 33 years old. Living in the villa area northeast of duwangting, unmarried. I work in Guiyou chain store. Every day I have to work overtime until 8 p.m. to go home. I don't smoke. The wine is only for a taste. Sleep at 11 p.m. for 8 hours a day. Before I go to bed, I must drink a cup of warm milk, then do 20 minutes of soft exercise, get on the bed, and immediately fall asleep. Never leave fatigue and stress until the next day. Doctors say I'm normal.")
|
|
infoBar = InfoBar(
|
|
icon=InfoBarIcon.WARNING,
|
|
title=self.tr('Warning'),
|
|
content=content,
|
|
orient=Qt.Vertical,
|
|
isClosable=True,
|
|
duration=-1,
|
|
position=InfoBarPosition.NONE,
|
|
parent=self
|
|
)
|
|
self.addExampleCard(
|
|
self.tr('A closable InfoBar with long message'),
|
|
infoBar,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/info_bar/demo.py',
|
|
)
|
|
|
|
# add custom widget to info bar
|
|
infoBar = InfoBar(
|
|
icon=FluentIcon.GITHUB,
|
|
title=self.tr('GitHub'),
|
|
content=self.tr("When you look long into an abyss, the abyss looks into you."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
duration=-1,
|
|
position=InfoBarPosition.NONE,
|
|
parent=self
|
|
)
|
|
infoBar.addWidget(PushButton(self.tr('Action')))
|
|
infoBar.setCustomBackgroundColor("white", "#2a2a2a")
|
|
self.addExampleCard(
|
|
self.tr('An InfoBar with custom icon, background color and widget.'),
|
|
infoBar,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/info_bar/demo.py',
|
|
)
|
|
|
|
# different type info bar
|
|
w = QWidget(self)
|
|
hBoxLayout = QHBoxLayout(w)
|
|
button1 = PushButton(self.tr('Top right'), w)
|
|
button2 = PushButton(self.tr('Top'), w)
|
|
button3 = PushButton(self.tr('Top left'), w)
|
|
button4 = PushButton(self.tr('Bottom right'), w)
|
|
button5 = PushButton(self.tr('Bottom'), w)
|
|
button6 = PushButton(self.tr('Bottom left'), w)
|
|
|
|
button1.clicked.connect(self.createTopRightInfoBar)
|
|
button2.clicked.connect(self.createTopInfoBar)
|
|
button3.clicked.connect(self.createTopLeftInfoBar)
|
|
button4.clicked.connect(self.createBottomRightInfoBar)
|
|
button5.clicked.connect(self.createBottomInfoBar)
|
|
button6.clicked.connect(self.createBottomLeftInfoBar)
|
|
|
|
hBoxLayout.addWidget(button1)
|
|
hBoxLayout.addWidget(button2)
|
|
hBoxLayout.addWidget(button3)
|
|
hBoxLayout.addWidget(button4)
|
|
hBoxLayout.addWidget(button5)
|
|
hBoxLayout.addWidget(button6)
|
|
hBoxLayout.setContentsMargins(0, 0, 0, 0)
|
|
hBoxLayout.setSpacing(15)
|
|
self.addExampleCard(
|
|
self.tr('InfoBar with different pop-up locations'),
|
|
w,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/info_bar/demo.py',
|
|
)
|
|
|
|
# indeterminate progress bar
|
|
bar = IndeterminateProgressBar(self)
|
|
bar.setFixedWidth(200)
|
|
card = self.addExampleCard(
|
|
self.tr('An indeterminate progress bar'),
|
|
bar,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/progress_bar/demo.py',
|
|
)
|
|
card.topLayout.setContentsMargins(12, 24, 12, 24)
|
|
|
|
# progress bar
|
|
bar = ProgressBar(self)
|
|
bar.setFixedWidth(200)
|
|
self.addExampleCard(
|
|
self.tr('An determinate progress bar'),
|
|
ProgressWidget(bar, self),
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/progress_bar/demo.py',
|
|
)
|
|
|
|
# Indeterminate progress ring
|
|
ring = IndeterminateProgressRing(self)
|
|
ring.setFixedSize(70, 70)
|
|
self.addExampleCard(
|
|
self.tr('An indeterminate progress ring'),
|
|
ring,
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/progress_ring/demo.py',
|
|
)
|
|
|
|
# progress ring
|
|
ring = ProgressRing(self)
|
|
ring.setFixedSize(80, 80)
|
|
ring.setTextVisible(True)
|
|
self.addExampleCard(
|
|
self.tr('An determinate progress ring'),
|
|
ProgressWidget(ring, self),
|
|
'https://github.com/zhiyiYo/PyQt-Fluent-Widgets/blob/master/examples/status_info/progress_ring/demo.py',
|
|
)
|
|
|
|
def onStateButtonClicked(self):
|
|
if self.stateTooltip:
|
|
self.stateTooltip.setContent(
|
|
self.tr('The model training is complete!') + ' 😆')
|
|
self.sender().setText(self.tr('Show StateToolTip'))
|
|
self.stateTooltip.setState(True)
|
|
self.stateTooltip = None
|
|
else:
|
|
self.stateTooltip = StateToolTip(
|
|
self.tr('Training model'), self.tr('Please wait patiently'), self.window())
|
|
self.sender().setText(self.tr('Hide StateToolTip'))
|
|
self.stateTooltip.move(self.stateTooltip.getSuitablePos())
|
|
self.stateTooltip.show()
|
|
|
|
def createTopRightInfoBar(self):
|
|
InfoBar.info(
|
|
title=self.tr('Lesson 3'),
|
|
content=self.tr("Believe in the spin, just keep believing!"),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.TOP_RIGHT,
|
|
duration=2000,
|
|
parent=self
|
|
)
|
|
|
|
def createTopInfoBar(self):
|
|
# convenient static mothod
|
|
InfoBar.success(
|
|
title=self.tr('Lesson 4'),
|
|
content=self.tr("With respect, let's advance towards a new stage of the spin."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.TOP,
|
|
duration=2000,
|
|
parent=self
|
|
)
|
|
|
|
def createTopLeftInfoBar(self):
|
|
InfoBar.warning(
|
|
title=self.tr('Lesson 5'),
|
|
content=self.tr("The shortest shortcut is to take a detour."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=False, # disable close button
|
|
position=InfoBarPosition.TOP_LEFT,
|
|
duration=2000,
|
|
parent=self
|
|
)
|
|
|
|
def createBottomRightInfoBar(self):
|
|
InfoBar.error(
|
|
title=self.tr('No Internet'),
|
|
content=self.tr("An error message which won't disappear automatically."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.BOTTOM_RIGHT,
|
|
duration=-1, # won't disappear automatically
|
|
parent=self
|
|
)
|
|
|
|
def createBottomInfoBar(self):
|
|
InfoBar.success(
|
|
title=self.tr('Lesson 1'),
|
|
content=self.tr("Don't have any strange expectations of me."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.BOTTOM,
|
|
duration=2000, # won't disappear automatically
|
|
parent=self
|
|
)
|
|
|
|
def createBottomLeftInfoBar(self):
|
|
InfoBar.warning(
|
|
title=self.tr('Lesson 2'),
|
|
content=self.tr("Don't let your muscles notice."),
|
|
orient=Qt.Horizontal,
|
|
isClosable=True,
|
|
position=InfoBarPosition.BOTTOM_LEFT,
|
|
duration=1500, # won't disappear automatically
|
|
parent=self
|
|
)
|
|
|
|
|
|
class ProgressWidget(QWidget):
|
|
|
|
def __init__(self, widget, parent=None):
|
|
super().__init__(parent=parent)
|
|
hBoxLayout = QHBoxLayout(self)
|
|
|
|
self.spinBox = SpinBox(self)
|
|
self.spinBox.valueChanged.connect(widget.setValue)
|
|
self.spinBox.setRange(0, 100)
|
|
|
|
hBoxLayout.addWidget(widget)
|
|
hBoxLayout.addSpacing(50)
|
|
hBoxLayout.addWidget(QLabel(self.tr('Progress')))
|
|
hBoxLayout.addSpacing(5)
|
|
hBoxLayout.addWidget(self.spinBox)
|
|
hBoxLayout.setContentsMargins(0, 0, 0, 0)
|
|
|
|
self.spinBox.setValue(0)
|