initial fluent-widgets ui
This commit is contained in:
92
qfluentwidgets/window/splash_screen.py
Normal file
92
qfluentwidgets/window/splash_screen.py
Normal file
@ -0,0 +1,92 @@
|
||||
# coding:utf-8
|
||||
from typing import Union
|
||||
import sys
|
||||
|
||||
from PySide6.QtCore import Qt, QSize, QRectF, QEvent
|
||||
from PySide6.QtGui import QPixmap, QPainter, QColor, QIcon
|
||||
from PySide6.QtWidgets import QWidget, QVBoxLayout, QGraphicsDropShadowEffect
|
||||
|
||||
from ..common.icon import FluentIconBase, drawIcon, toQIcon
|
||||
from ..common.style_sheet import isDarkTheme, FluentStyleSheet
|
||||
from ..components.widgets import IconWidget
|
||||
from qframelesswindow import TitleBar
|
||||
|
||||
|
||||
|
||||
class SplashScreen(QWidget):
|
||||
""" Splash screen """
|
||||
|
||||
def __init__(self, icon: Union[str, QIcon, FluentIconBase], parent=None, enableShadow=True):
|
||||
super().__init__(parent=parent)
|
||||
self._icon = icon
|
||||
self._iconSize = QSize(96, 96)
|
||||
|
||||
self.titleBar = TitleBar(self)
|
||||
self.iconWidget = IconWidget(icon, self)
|
||||
self.shadowEffect = QGraphicsDropShadowEffect(self)
|
||||
|
||||
self.iconWidget.setFixedSize(self._iconSize)
|
||||
self.shadowEffect.setColor(QColor(0, 0, 0, 50))
|
||||
self.shadowEffect.setBlurRadius(15)
|
||||
self.shadowEffect.setOffset(0, 4)
|
||||
|
||||
FluentStyleSheet.FLUENT_WINDOW.apply(self.titleBar)
|
||||
|
||||
if enableShadow:
|
||||
self.iconWidget.setGraphicsEffect(self.shadowEffect)
|
||||
|
||||
if parent:
|
||||
parent.installEventFilter(self)
|
||||
|
||||
if sys.platform == "darwin":
|
||||
self.titleBar.hide()
|
||||
|
||||
def setIcon(self, icon: Union[str, QIcon, FluentIconBase]):
|
||||
self._icon = icon
|
||||
self.update()
|
||||
|
||||
def icon(self):
|
||||
return toQIcon(self._icon)
|
||||
|
||||
def setIconSize(self, size: QSize):
|
||||
self._iconSize = size
|
||||
self.iconWidget.setFixedSize(size)
|
||||
self.update()
|
||||
|
||||
def iconSize(self):
|
||||
return self._iconSize
|
||||
|
||||
def setTitleBar(self, titleBar: QWidget):
|
||||
""" set title bar """
|
||||
self.titleBar.deleteLater()
|
||||
self.titleBar = titleBar
|
||||
titleBar.setParent(self)
|
||||
titleBar.raise_()
|
||||
self.titleBar.resize(self.width(), self.titleBar.height())
|
||||
|
||||
def eventFilter(self, obj, e: QEvent):
|
||||
if obj is self.parent():
|
||||
if e.type() == QEvent.Resize:
|
||||
self.resize(e.size())
|
||||
elif e.type() == QEvent.ChildAdded:
|
||||
self.raise_()
|
||||
|
||||
return super().eventFilter(obj, e)
|
||||
|
||||
def resizeEvent(self, e):
|
||||
iw, ih = self.iconSize().width(), self.iconSize().height()
|
||||
self.iconWidget.move(self.width()//2 - iw//2, self.height()//2 - ih//2)
|
||||
self.titleBar.resize(self.width(), self.titleBar.height())
|
||||
|
||||
def finish(self):
|
||||
""" close splash screen """
|
||||
self.close()
|
||||
|
||||
def paintEvent(self, e):
|
||||
painter = QPainter(self)
|
||||
painter.setPen(Qt.NoPen)
|
||||
|
||||
# draw background
|
||||
c = 32 if isDarkTheme() else 255
|
||||
painter.setBrush(QColor(c, c, c))
|
||||
painter.drawRect(self.rect())
|
||||
Reference in New Issue
Block a user