85 lines
2.8 KiB
Python
85 lines
2.8 KiB
Python
# coding:utf-8
|
|
import sys
|
|
from PyQt5 import QtGui
|
|
|
|
from PyQt5.QtCore import Qt
|
|
from PyQt5.QtGui import QIcon, QColor
|
|
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QHBoxLayout
|
|
|
|
from qfluentwidgets import (RoundMenu, FluentIcon, Action, AvatarWidget, BodyLabel,
|
|
HyperlinkButton, CaptionLabel, setFont, setTheme, Theme, isDarkTheme)
|
|
|
|
|
|
class ProfileCard(QWidget):
|
|
""" Profile card """
|
|
|
|
def __init__(self, avatarPath: str, name: str, email: str, parent=None):
|
|
super().__init__(parent=parent)
|
|
self.avatar = AvatarWidget(avatarPath, self)
|
|
self.nameLabel = BodyLabel(name, self)
|
|
self.emailLabel = CaptionLabel(email, self)
|
|
self.logoutButton = HyperlinkButton(
|
|
'https://github.com/zhiyiYo/QMaterialWidgets', '注销', self)
|
|
|
|
color = QColor(206, 206, 206) if isDarkTheme() else QColor(96, 96, 96)
|
|
self.emailLabel.setStyleSheet('QLabel{color: '+color.name()+'}')
|
|
|
|
color = QColor(255, 255, 255) if isDarkTheme() else QColor(0, 0, 0)
|
|
self.nameLabel.setStyleSheet('QLabel{color: '+color.name()+'}')
|
|
setFont(self.logoutButton, 13)
|
|
|
|
self.setFixedSize(307, 82)
|
|
self.avatar.setRadius(24)
|
|
self.avatar.move(2, 6)
|
|
self.nameLabel.move(64, 13)
|
|
self.emailLabel.move(64, 32)
|
|
self.logoutButton.move(52, 48)
|
|
|
|
|
|
class Demo(QWidget):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
# setTheme(Theme.DARK)
|
|
# self.setStyleSheet('Demo{background: rgb(32, 32, 32)}')
|
|
self.setStyleSheet('Demo{background: white}')
|
|
self.setLayout(QHBoxLayout())
|
|
|
|
self.label = BodyLabel('Right-click your mouse', self)
|
|
self.label.setAlignment(Qt.AlignCenter)
|
|
setFont(self.label, 18)
|
|
|
|
self.layout().addWidget(self.label)
|
|
self.resize(400, 400)
|
|
|
|
def contextMenuEvent(self, e) -> None:
|
|
menu = RoundMenu(parent=self)
|
|
|
|
# add custom widget
|
|
card = ProfileCard('resource/shoko.png', '硝子酱', 'shokokawaii@outlook.com', menu)
|
|
menu.addWidget(card, selectable=False)
|
|
# menu.addWidget(card, selectable=True, onClick=lambda: print('666'))
|
|
|
|
menu.addSeparator()
|
|
menu.addActions([
|
|
Action(FluentIcon.PEOPLE, '管理账户和设置'),
|
|
Action(FluentIcon.SHOPPING_CART, '支付方式'),
|
|
Action(FluentIcon.CODE, '兑换代码和礼品卡'),
|
|
])
|
|
menu.addSeparator()
|
|
menu.addAction(Action(FluentIcon.SETTING, '设置'))
|
|
menu.exec(e.globalPos())
|
|
|
|
|
|
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_()
|