139 lines
5.7 KiB
Python
139 lines
5.7 KiB
Python
# coding: utf-8
|
|
from PyQt5.QtCore import QUrl, QSize
|
|
from PyQt5.QtGui import QIcon, QDesktopServices
|
|
from PyQt5.QtWidgets import QApplication
|
|
|
|
from qfluentwidgets import (NavigationAvatarWidget, NavigationItemPosition, MessageBox, FluentWindow,
|
|
SplashScreen)
|
|
from qfluentwidgets import FluentIcon as FIF
|
|
|
|
from .gallery_interface import GalleryInterface
|
|
from .home_interface import HomeInterface
|
|
from .basic_input_interface import BasicInputInterface
|
|
from .date_time_interface import DateTimeInterface
|
|
from .dialog_interface import DialogInterface
|
|
from .layout_interface import LayoutInterface
|
|
from .icon_interface import IconInterface
|
|
from .material_interface import MaterialInterface
|
|
from .menu_interface import MenuInterface
|
|
from .navigation_view_interface import NavigationViewInterface
|
|
from .scroll_interface import ScrollInterface
|
|
from .status_info_interface import StatusInfoInterface
|
|
from .setting_interface import SettingInterface
|
|
from .text_interface import TextInterface
|
|
from .view_interface import ViewInterface
|
|
from ..common.config import SUPPORT_URL, cfg
|
|
from ..common.icon import Icon
|
|
from ..common.signal_bus import signalBus
|
|
from ..common.translator import Translator
|
|
from ..common import resource
|
|
|
|
|
|
class MainWindow(FluentWindow):
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
self.initWindow()
|
|
|
|
# create sub interface
|
|
self.homeInterface = HomeInterface(self)
|
|
self.iconInterface = IconInterface(self)
|
|
self.basicInputInterface = BasicInputInterface(self)
|
|
self.dateTimeInterface = DateTimeInterface(self)
|
|
self.dialogInterface = DialogInterface(self)
|
|
self.layoutInterface = LayoutInterface(self)
|
|
self.menuInterface = MenuInterface(self)
|
|
self.materialInterface = MaterialInterface(self)
|
|
self.navigationViewInterface = NavigationViewInterface(self)
|
|
self.scrollInterface = ScrollInterface(self)
|
|
self.statusInfoInterface = StatusInfoInterface(self)
|
|
self.settingInterface = SettingInterface(self)
|
|
self.textInterface = TextInterface(self)
|
|
self.viewInterface = ViewInterface(self)
|
|
|
|
# enable acrylic effect
|
|
self.navigationInterface.setAcrylicEnabled(True)
|
|
|
|
self.connectSignalToSlot()
|
|
|
|
# add items to navigation interface
|
|
self.initNavigation()
|
|
self.splashScreen.finish()
|
|
|
|
def connectSignalToSlot(self):
|
|
signalBus.micaEnableChanged.connect(self.setMicaEffectEnabled)
|
|
signalBus.switchToSampleCard.connect(self.switchToSample)
|
|
signalBus.supportSignal.connect(self.onSupport)
|
|
|
|
def initNavigation(self):
|
|
# add navigation items
|
|
t = Translator()
|
|
self.addSubInterface(self.homeInterface, FIF.HOME, self.tr('Home'))
|
|
self.addSubInterface(self.iconInterface, Icon.EMOJI_TAB_SYMBOLS, t.icons)
|
|
self.navigationInterface.addSeparator()
|
|
|
|
pos = NavigationItemPosition.SCROLL
|
|
self.addSubInterface(self.basicInputInterface, FIF.CHECKBOX,t.basicInput, pos)
|
|
self.addSubInterface(self.dateTimeInterface, FIF.DATE_TIME, t.dateTime, pos)
|
|
self.addSubInterface(self.dialogInterface, FIF.MESSAGE, t.dialogs, pos)
|
|
self.addSubInterface(self.layoutInterface, FIF.LAYOUT, t.layout, pos)
|
|
self.addSubInterface(self.materialInterface, FIF.PALETTE, t.material, pos)
|
|
self.addSubInterface(self.menuInterface, Icon.MENU, t.menus, pos)
|
|
self.addSubInterface(self.navigationViewInterface, FIF.MENU, t.navigation, pos)
|
|
self.addSubInterface(self.scrollInterface, FIF.SCROLL, t.scroll, pos)
|
|
self.addSubInterface(self.statusInfoInterface, FIF.CHAT, t.statusInfo, pos)
|
|
self.addSubInterface(self.textInterface, Icon.TEXT, t.text, pos)
|
|
self.addSubInterface(self.viewInterface, Icon.GRID, t.view, pos)
|
|
|
|
# add custom widget to bottom
|
|
self.navigationInterface.addWidget(
|
|
routeKey='avatar',
|
|
widget=NavigationAvatarWidget('zhiyiYo', ':/gallery/images/shoko.png'),
|
|
onClick=self.onSupport,
|
|
position=NavigationItemPosition.BOTTOM
|
|
)
|
|
self.addSubInterface(
|
|
self.settingInterface, FIF.SETTING, self.tr('Settings'), NavigationItemPosition.BOTTOM)
|
|
|
|
def initWindow(self):
|
|
self.resize(960, 780)
|
|
self.setMinimumWidth(760)
|
|
self.setWindowIcon(QIcon(':/gallery/images/logo.png'))
|
|
self.setWindowTitle('PyQt-Fluent-Widgets')
|
|
|
|
self.setMicaEffectEnabled(cfg.get(cfg.micaEnabled))
|
|
|
|
# create splash screen
|
|
self.splashScreen = SplashScreen(self.windowIcon(), self)
|
|
self.splashScreen.setIconSize(QSize(106, 106))
|
|
self.splashScreen.raise_()
|
|
|
|
desktop = QApplication.desktop().availableGeometry()
|
|
w, h = desktop.width(), desktop.height()
|
|
self.move(w//2 - self.width()//2, h//2 - self.height()//2)
|
|
self.show()
|
|
QApplication.processEvents()
|
|
|
|
def onSupport(self):
|
|
w = MessageBox(
|
|
'支持作者🥰',
|
|
'个人开发不易,如果这个项目帮助到了您,可以考虑请作者喝一瓶快乐水🥤。您的支持就是作者开发和维护项目的动力🚀',
|
|
self
|
|
)
|
|
w.yesButton.setText('来啦老弟')
|
|
w.cancelButton.setText('下次一定')
|
|
if w.exec():
|
|
QDesktopServices.openUrl(QUrl(SUPPORT_URL))
|
|
|
|
def resizeEvent(self, e):
|
|
super().resizeEvent(e)
|
|
self.splashScreen.resize(self.size())
|
|
|
|
def switchToSample(self, routeKey, index):
|
|
""" switch to sample """
|
|
interfaces = self.findChildren(GalleryInterface)
|
|
for w in interfaces:
|
|
if w.objectName() == routeKey:
|
|
self.stackedWidget.setCurrentWidget(w, False)
|
|
w.scrollToCard(index)
|