main_setting.py 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. # -*- coding: utf-8 -*-
  2. from PyQt6.QtCore import *
  3. from PyQt6.QtWidgets import *
  4. from PyQt6.QtGui import *
  5. from qfluentwidgets import *
  6. from qfluentwidgets import FluentIcon as FIF
  7. from .common.config import cfg, HELP_URL, FEEDBACK_URL, AUTHOR, VERSION, YEAR, isWin11
  8. from .common.signal_bus import signalBus
  9. from .common.style_sheet import StyleSheet
  10. class MainSetting(ScrollArea):
  11. def __init__(self, parent=None):
  12. super().__init__(parent=parent)
  13. self.scrollWidget = QWidget()
  14. self.expandLayout = ExpandLayout(self.scrollWidget)
  15. # setting label
  16. self.settingLabel = QLabel('设置', self)
  17. # music folders
  18. self.musicInThisPCGroup = SettingCardGroup(
  19. '资源目录', self.scrollWidget)
  20. self.downloadFolderCard = PushSettingCard(
  21. '选择文件夹',
  22. FIF.DOWNLOAD,
  23. '下载目录',
  24. cfg.get(cfg.downloadFolder),
  25. self.musicInThisPCGroup
  26. )
  27. # personalization
  28. self.personalGroup = SettingCardGroup(
  29. '个性化', self.scrollWidget)
  30. self.micaCard = SwitchSettingCard(
  31. FIF.TRANSPARENT,
  32. '云母效果',
  33. '窗口和表面显示半透明',
  34. cfg.micaEnabled,
  35. self.personalGroup
  36. )
  37. self.themeCard = OptionsSettingCard(
  38. cfg.themeMode,
  39. FIF.BRUSH,
  40. '主题外观',
  41. '调整你的灵镜外观',
  42. texts=[
  43. '浅色', '深色',
  44. '跟随系统'
  45. ],
  46. parent=self.personalGroup
  47. )
  48. self.themeColorCard = CustomColorSettingCard(
  49. cfg.themeColor,
  50. FIF.PALETTE,
  51. '主题颜色',
  52. '调整你的灵镜颜色',
  53. self.personalGroup
  54. )
  55. '''
  56. self.zoomCard = OptionsSettingCard(
  57. cfg.dpiScale,
  58. FIF.ZOOM,
  59. '界面缩放',
  60. '调整小部件和字体的大小',
  61. texts=[
  62. "100%", "125%", "150%", "175%", "200%",
  63. '跟随系统'
  64. ],
  65. parent=self.personalGroup
  66. )
  67. '''
  68. self.blurRadiusCard = RangeSettingCard(
  69. cfg.blurRadius,
  70. FIF.ALBUM,
  71. '亚克力磨砂半径',
  72. '磨砂半径越大,图像越模糊',
  73. parent=self.personalGroup
  74. )
  75. # update software
  76. self.updateSoftwareGroup = SettingCardGroup(
  77. '版本更新', self.scrollWidget)
  78. self.updateOnStartUpCard = SwitchSettingCard(
  79. FIF.UPDATE,
  80. '在灵镜启动时检查更新',
  81. '新版本将更加稳定并拥有更多功能(建议启用此选项)',
  82. configItem=cfg.checkUpdateAtStartUp,
  83. parent=self.updateSoftwareGroup
  84. )
  85. # application
  86. self.aboutGroup = SettingCardGroup('关于灵镜', self.scrollWidget)
  87. self.helpCard = HyperlinkCard(
  88. HELP_URL,
  89. '打开帮助页面',
  90. FIF.HELP,
  91. '帮助',
  92. '发现新功能并了解灵镜有关的使用技巧',
  93. self.aboutGroup
  94. )
  95. self.feedbackCard = PrimaryPushSettingCard(
  96. '提供反馈',
  97. FIF.FEEDBACK,
  98. '提供反馈',
  99. '帮助我们改进灵镜',
  100. self.aboutGroup
  101. )
  102. self.aboutCard = PrimaryPushSettingCard(
  103. '检查更新',
  104. FIF.INFO,
  105. '关于',
  106. '© 版权所有' + f" {YEAR}, {AUTHOR}. " +
  107. "当前版本 " + VERSION,
  108. self.aboutGroup
  109. )
  110. self.__initWidget()
  111. def __initWidget(self):
  112. self.resize(1000, 800)
  113. self.setHorizontalScrollBarPolicy(Qt.ScrollBarPolicy.ScrollBarAlwaysOff)
  114. self.setViewportMargins(0, 80, 0, 20)
  115. self.setWidget(self.scrollWidget)
  116. self.setWidgetResizable(True)
  117. self.setObjectName('settingInterface')
  118. # initialize style sheet
  119. self.scrollWidget.setObjectName('scrollWidget')
  120. self.settingLabel.setObjectName('settingLabel')
  121. StyleSheet.SETTING_INTERFACE.apply(self)
  122. self.micaCard.setEnabled(isWin11())
  123. # initialize layout
  124. self.__initLayout()
  125. self.__connectSignalToSlot()
  126. def __initLayout(self):
  127. self.settingLabel.move(36, 30)
  128. # add cards to group
  129. self.musicInThisPCGroup.addSettingCard(self.downloadFolderCard)
  130. self.personalGroup.addSettingCard(self.micaCard)
  131. self.personalGroup.addSettingCard(self.themeCard)
  132. self.personalGroup.addSettingCard(self.themeColorCard)
  133. #self.personalGroup.addSettingCard(self.zoomCard)
  134. #self.personalGroup.addSettingCard(self.languageCard)
  135. self.personalGroup.addSettingCard(self.blurRadiusCard)
  136. self.updateSoftwareGroup.addSettingCard(self.updateOnStartUpCard)
  137. self.aboutGroup.addSettingCard(self.helpCard)
  138. self.aboutGroup.addSettingCard(self.feedbackCard)
  139. self.aboutGroup.addSettingCard(self.aboutCard)
  140. # add setting card group to layout
  141. self.expandLayout.setSpacing(28)
  142. self.expandLayout.setContentsMargins(36, 10, 36, 0)
  143. self.expandLayout.addWidget(self.musicInThisPCGroup)
  144. self.expandLayout.addWidget(self.personalGroup)
  145. self.expandLayout.addWidget(self.updateSoftwareGroup)
  146. self.expandLayout.addWidget(self.aboutGroup)
  147. def __showRestartTooltip(self):
  148. """ show restart tooltip """
  149. InfoBar.success(
  150. '更新成功',
  151. '配置将在重启后生效',
  152. duration=1500,
  153. parent=self
  154. )
  155. def __onDownloadFolderCardClicked(self):
  156. """ download folder card clicked slot """
  157. folder = QFileDialog.getExistingDirectory(
  158. self, '选择文件夹', "./")
  159. if not folder or cfg.get(cfg.downloadFolder) == folder:
  160. return
  161. cfg.set(cfg.downloadFolder, folder)
  162. self.downloadFolderCard.setContent(folder)
  163. def __connectSignalToSlot(self):
  164. """ connect signal to slot """
  165. cfg.appRestartSig.connect(self.__showRestartTooltip)
  166. # music in the pc
  167. self.downloadFolderCard.clicked.connect(
  168. self.__onDownloadFolderCardClicked)
  169. # personalization
  170. self.themeCard.optionChanged.connect(lambda ci: setTheme(cfg.get(ci)))
  171. self.themeColorCard.colorChanged.connect(lambda c: setThemeColor(c))
  172. self.micaCard.checkedChanged.connect(signalBus.micaEnableChanged)
  173. # about
  174. self.feedbackCard.clicked.connect(
  175. lambda: QDesktopServices.openUrl(QUrl(FEEDBACK_URL)))