Files
xml-editor/app/view/main_window.py
2023-10-24 17:15:13 +02:00

139 lines
5.7 KiB
Python

# coding: utf-8
from PyQt6.QtCore import QUrl, QSize
from PyQt6.QtGui import QIcon, QDesktopServices, QGuiApplication
from PyQt6.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 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 = QGuiApplication.primaryScreen().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)