86 lines
2.7 KiB
Python
86 lines
2.7 KiB
Python
# coding:utf-8
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
from PyQt5.QtCore import QModelIndex, Qt, QRect, QSize
|
|
from PyQt5.QtGui import QIcon, QPainter, QFont, QColor
|
|
from PyQt5.QtWidgets import QApplication, QStyleOptionViewItem, QWidget, QHBoxLayout, QVBoxLayout
|
|
|
|
from qfluentwidgets import (FlipImageDelegate, setTheme, Theme, HorizontalPipsPager, HorizontalFlipView,
|
|
VerticalFlipView, getFont)
|
|
|
|
|
|
class CustomFlipItemDelegate(FlipImageDelegate):
|
|
""" Custom flip item delegate """
|
|
|
|
def paint(self, painter: QPainter, option: QStyleOptionViewItem, index: QModelIndex):
|
|
super().paint(painter, option, index)
|
|
painter.save()
|
|
|
|
# draw mask
|
|
painter.setBrush(QColor(255, 255, 255, 200))
|
|
painter.setPen(Qt.NoPen)
|
|
rect = option.rect
|
|
rect = QRect(rect.x(), rect.y(), 200, rect.height())
|
|
painter.drawRect(rect)
|
|
|
|
# draw text
|
|
painter.setPen(Qt.black)
|
|
painter.setFont(getFont(16, QFont.Bold))
|
|
painter.drawText(rect, Qt.AlignCenter, '🥰\n硝子酱一级棒卡哇伊')
|
|
|
|
painter.restore()
|
|
|
|
|
|
|
|
class Demo(QWidget):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
# setTheme(Theme.DARK)
|
|
# self.setStyleSheet('Demo{background:rgb(32,32,32)}')
|
|
|
|
self.flipView = HorizontalFlipView(self)
|
|
self.pager = HorizontalPipsPager(self)
|
|
|
|
# adjust view size
|
|
# self.flipView.setItemSize(QSize(320, 180))
|
|
# self.flipView.setFixedSize(QSize(320, 180))
|
|
|
|
# NOTE: use custom delegate
|
|
# self.flipView.setItemDelegate(CustomFlipItemDelegate(self.flipView))
|
|
|
|
# add images
|
|
self.flipView.addImages([str(i) for i in Path('./resource').glob('*')])
|
|
self.pager.setPageNumber(self.flipView.count())
|
|
|
|
# adjust border radius
|
|
# self.flipView.setBorderRadius(15)
|
|
# self.flipView.setFixedSize(QSize(710, 270))
|
|
# self.flipView.setSpacing(15)
|
|
|
|
self.pager.currentIndexChanged.connect(self.flipView.setCurrentIndex)
|
|
self.flipView.currentIndexChanged.connect(self.pager.setCurrentIndex)
|
|
|
|
# self.flipView.setCurrentIndex(2)
|
|
|
|
self.setLayout(QVBoxLayout(self))
|
|
self.layout().addWidget(self.flipView, 0, Qt.AlignCenter)
|
|
self.layout().addWidget(self.pager, 0, Qt.AlignCenter)
|
|
self.layout().setAlignment(Qt.AlignCenter)
|
|
self.layout().setSpacing(20)
|
|
self.resize(600, 600)
|
|
|
|
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# enable dpi scale
|
|
QApplication.setHighDpiScaleFactorRoundingPolicy(Qt.HighDpiScaleFactorRoundingPolicy.PassThrough)
|
|
QApplication.setAttribute(Qt.AA_EnableHighDpiScaling)
|
|
QApplication.setAttribute(Qt.AA_UseHighDpiPixmaps)
|
|
|
|
app = QApplication(sys.argv)
|
|
w = Demo()
|
|
w.show()
|
|
app.exec_() |