You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

72 lines
2.5 KiB

# coding:utf-8
from PySide6.QtCore import Qt, Signal, QUrl
from PySide6.QtGui import QPixmap, QDesktopServices
from PySide6.QtWidgets import QFrame, QLabel, QVBoxLayout, QWidget, QHBoxLayout
from qfluentwidgets import IconWidget, FluentIcon, TextWrap, SingleDirectionScrollArea
from ..common.style_sheet import StyleSheet
class LinkCard(QFrame):
def __init__(self, icon, title, content, url, parent=None):
super().__init__(parent=parent)
self.url = QUrl(url)
self.setFixedSize(198, 220)
self.iconWidget = IconWidget(icon, self)
self.titleLabel = QLabel(title, self)
self.contentLabel = QLabel(TextWrap.wrap(content, 28, False)[0], self)
self.urlWidget = IconWidget(FluentIcon.LINK, self)
self.__initWidget()
def __initWidget(self):
self.setCursor(Qt.PointingHandCursor)
self.iconWidget.setFixedSize(54, 54)
self.urlWidget.setFixedSize(16, 16)
self.vBoxLayout = QVBoxLayout(self)
self.vBoxLayout.setSpacing(0)
self.vBoxLayout.setContentsMargins(24, 24, 0, 13)
self.vBoxLayout.addWidget(self.iconWidget)
self.vBoxLayout.addSpacing(16)
self.vBoxLayout.addWidget(self.titleLabel)
self.vBoxLayout.addSpacing(8)
self.vBoxLayout.addWidget(self.contentLabel)
self.vBoxLayout.setAlignment(Qt.AlignLeft | Qt.AlignTop)
self.urlWidget.move(170, 192)
self.titleLabel.setObjectName('titleLabel')
self.contentLabel.setObjectName('contentLabel')
def mouseReleaseEvent(self, e):
super().mouseReleaseEvent(e)
QDesktopServices.openUrl(self.url)
class LinkCardView(SingleDirectionScrollArea):
""" Link card view """
def __init__(self, parent=None):
super().__init__(parent, Qt.Horizontal)
self.view = QWidget(self)
self.hBoxLayout = QHBoxLayout(self.view)
self.hBoxLayout.setContentsMargins(36, 0, 0, 0)
self.hBoxLayout.setSpacing(12)
self.hBoxLayout.setAlignment(Qt.AlignLeft)
self.setWidget(self.view)
self.setWidgetResizable(True)
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
self.view.setObjectName('view')
StyleSheet.LINK_CARD.apply(self)
def addCard(self, icon, title, content, url):
""" add link card """
card = LinkCard(icon, title, content, url, self.view)
self.hBoxLayout.addWidget(card, 0, Qt.AlignLeft)