diff --git a/examples/Gallery for siui/components/page_about/page_about.py b/examples/Gallery for siui/components/page_about/page_about.py index 1601130..0ed2bfb 100644 --- a/examples/Gallery for siui/components/page_about/page_about.py +++ b/examples/Gallery for siui/components/page_about/page_about.py @@ -2,14 +2,18 @@ from PyQt5.QtGui import QDesktopServices from PyQt5.QtWidgets import QSizePolicy -from siui.components import SiTitledWidgetGroup, SiOptionCardLinear, SiPushButton, SiSimpleButton, SiPixLabel, \ - SiDenseVContainer, SiLabel +from siui.components import ( + SiDenseVContainer, + SiLabel, + SiOptionCardLinear, + SiPixLabel, + SiPushButton, + SiSimpleButton, + SiTitledWidgetGroup, +) from siui.components.page import SiPage -from siui.core import SiColor -from siui.core import SiQuickEffect -from siui.core import SiGlobal -from siui.core import Si -from siui.gui import GlobalFont +from siui.core import GlobalFont, Si, SiColor, SiGlobal, SiQuickEffect +from siui.gui import SiFont class About(SiPage): @@ -35,7 +39,7 @@ def __init__(self, *args, **kwargs): self.version_label = SiLabel(self) self.version_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.version_label.setFont(GlobalFont.M_NORMAL.value) + self.version_label.setFont(SiFont.tokenized(GlobalFont.M_NORMAL)) self.version_label.setStyleSheet(f"color: {self.colorGroup().fromToken(SiColor.TEXT_D)}") self.version_label.setText("PyQt-SiliconUI") diff --git a/examples/Gallery for siui/components/page_container/page_container.py b/examples/Gallery for siui/components/page_container/page_container.py index d1e89a5..f9c4cad 100644 --- a/examples/Gallery for siui/components/page_container/page_container.py +++ b/examples/Gallery for siui/components/page_container/page_container.py @@ -3,9 +3,10 @@ from siui.components import SiTitledWidgetGroup, SiLabel, SiDenseHContainer, SiDenseVContainer, SiDividedHContainer, \ SiDividedVContainer, SiFlowContainer, SiDraggableLabel, SiSimpleButton, SiPushButton, SiMasonryContainer from siui.components.page import SiPage -from siui.core import SiColor +from siui.core import SiColor, GlobalFont from siui.core import SiGlobal from siui.core import Si +from siui.gui import SiFont from ..option_card import OptionCardPlaneForWidgetDemos import random @@ -219,7 +220,7 @@ def __init__(self, *args, **kwargs): for _ in range(15): label = SiDraggableLabel(self) button = SiSimpleButton(label) - button.attachment().setFont(SiGlobal.siui.fonts["S_NORMAL"]) + button.attachment().setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) button.attachment().setText(str(round(random.random(), int(6 * random.random() + 2)))) button.colorGroup().assign(SiColor.BUTTON_OFF, button.colorGroup().fromToken(SiColor.INTERFACE_BG_D)) button.setFixedHeight(32) diff --git a/examples/Gallery for siui/components/page_dialog/components/side_msg_box.py b/examples/Gallery for siui/components/page_dialog/components/side_msg_box.py index 03b10d2..615b482 100644 --- a/examples/Gallery for siui/components/page_dialog/components/side_msg_box.py +++ b/examples/Gallery for siui/components/page_dialog/components/side_msg_box.py @@ -1,7 +1,6 @@ from siui.components import SiDenseHContainer, SiDenseVContainer, SiLabel, SiPixLabel, SiSimpleButton -from siui.core import SiColor -from siui.core import SiGlobal -from siui.gui import GlobalFont, SiFont +from siui.core import GlobalFont, SiColor, SiGlobal +from siui.gui import SiFont from siui.templates.application.components.message.box import SiSideMessageBox @@ -34,7 +33,7 @@ def send_custom_message(type_, auto_close=False, auto_close_duration=1000): container.setSpacing(0) info_label = SiLabel() - info_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + info_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) info_label.setStyleSheet(f"color: {info_label.colorGroup().fromToken(SiColor.TEXT_D)}; padding-left: 16px") info_label.setText("以下账号已成功登录") info_label.adjustSize() @@ -55,7 +54,7 @@ def send_custom_message(type_, auto_close=False, auto_close_duration=1000): container_v.setSpacing(0) name_label = SiLabel() - name_label.setFont(SiFont.fromToken(GlobalFont.M_BOLD)) + name_label.setFont(SiFont.tokenized(GlobalFont.M_BOLD)) name_label.setStyleSheet(f"color: {name_label.colorGroup().fromToken(SiColor.TEXT_B)}; padding-left:8px") name_label.setText("霏泠Ice") name_label.adjustSize() diff --git a/examples/Gallery for siui/components/page_functional/components/music_displayer/music_displayer.py b/examples/Gallery for siui/components/page_functional/components/music_displayer/music_displayer.py index 611d19b..84a3035 100644 --- a/examples/Gallery for siui/components/page_functional/components/music_displayer/music_displayer.py +++ b/examples/Gallery for siui/components/page_functional/components/music_displayer/music_displayer.py @@ -2,12 +2,8 @@ from PyQt5.QtGui import QFont from siui.components import SiDenseVContainer, SiLabel, SiPixLabel, SiSimpleButton, SiWidget -from siui.core import SiExpAnimation -from siui.core import SiColor -from siui.core import SiQuickEffect -from siui.core import SiGlobal -from siui.core import Si -from siui.gui import SiFont, GlobalFont +from siui.core import Si, SiColor, SiGlobal, SiQuickEffect +from siui.gui import SiFont class InfoPanel(SiWidget): diff --git a/examples/Gallery for siui/components/page_homepage/page_homepage.py b/examples/Gallery for siui/components/page_homepage/page_homepage.py index 518569d..87948ed 100644 --- a/examples/Gallery for siui/components/page_homepage/page_homepage.py +++ b/examples/Gallery for siui/components/page_homepage/page_homepage.py @@ -1,6 +1,5 @@ -from PyQt5.Qt import QColor + from PyQt5.QtCore import Qt -from PyQt5.QtWidgets import QGraphicsDropShadowEffect from siui.components import SiPixLabel from siui.components.option_card import SiOptionCardLinear, SiOptionCardPlane @@ -17,11 +16,8 @@ SiSimpleButton, SiSwitch, ) -from siui.core import SiColor -from siui.core import SiQuickEffect -from siui.core import SiGlobal -from siui.core import Si -from siui.gui import SiFont, GlobalFont +from siui.core import GlobalFont, Si, SiColor, SiGlobal, SiQuickEffect +from siui.gui import SiFont from .components.themed_option_card import ThemedOptionCardPlane @@ -58,14 +54,14 @@ def __init__(self, *args, **kwargs): self.title.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.title.setText("Silicon UI") self.title.setStyleSheet("color: {}".format(SiGlobal.siui.colors["TEXT_A"])) - self.title.setFont(SiGlobal.siui.fonts["XL_NORMAL"]) + self.title.setFont(SiFont.tokenized(GlobalFont.XL_NORMAL)) self.subtitle = SiLabel(self.head_area) self.subtitle.setGeometry(64, 72, 500, 48) self.subtitle.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.subtitle.setText("A powerful and artistic UI library based on PyQt5") self.subtitle.setStyleSheet("color: {}".format(SiColor.trans(SiGlobal.siui.colors["TEXT_A"], 0.9))) - self.subtitle.setFont(SiFont.fromToken(GlobalFont.S_DEMI_BOLD)) + self.subtitle.setFont(SiFont.tokenized(GlobalFont.S_DEMI_BOLD)) # 创建一个水平容器 self.container_for_cards = SiDenseHContainer(self.head_area) diff --git a/examples/Gallery for siui/components/page_widgets/components/demo_tables.py b/examples/Gallery for siui/components/page_widgets/components/demo_tables.py index ca23774..7e3a48d 100644 --- a/examples/Gallery for siui/components/page_widgets/components/demo_tables.py +++ b/examples/Gallery for siui/components/page_widgets/components/demo_tables.py @@ -1,8 +1,7 @@ from siui.components import SiLabel, SiPixLabel from siui.components.widgets.abstracts.table import ABCSiTabelManager, SiRow -from siui.core import SiColor -from siui.core import Si -from siui.gui import GlobalFont, SiFont +from siui.core import GlobalFont, Si, SiColor +from siui.gui import SiFont class DemoOsuPlayerRankingTableManager(ABCSiTabelManager): @@ -40,7 +39,7 @@ def _value_read_parser(self, row_index, col_index): def _value_write_parser(self, row_index, col_index, value): widget = self.parent().getRowWidget(row_index)[col_index] if col_index == 0: - widget.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + widget.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) widget.setTextColor(self.parent().colorGroup().fromToken(SiColor.TEXT_B)) if col_index == 1: @@ -50,9 +49,9 @@ def _value_write_parser(self, row_index, col_index, value): if col_index == 2: widget.setTextColor(self.parent().colorGroup().fromToken(SiColor.TEXT_B)) if row_index == 0: - widget.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + widget.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) else: - widget.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + widget.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) if col_index == 3: if value == "100.00%": @@ -96,7 +95,7 @@ def _widget_creator(self, col_index): def on_header_created(self, header: SiRow): for name in self.parent().column_names: new_label = SiLabel(self.parent()) - new_label.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + new_label.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) new_label.setTextColor(self.parent().colorGroup().fromToken(SiColor.TEXT_D)) new_label.setText(name) new_label.adjustSize() diff --git a/siui/components/combobox/combobox.py b/siui/components/combobox/combobox.py index 10d5fe4..62a59e8 100644 --- a/siui/components/combobox/combobox.py +++ b/siui/components/combobox/combobox.py @@ -6,9 +6,8 @@ from siui.components.menu.menu import SiMenu from siui.components.widgets.button import SiSimpleButton from siui.components.widgets.label import SiLabel -from siui.core import SiColor -from siui.core import Si -from siui.gui.font import GlobalFont, SiFont +from siui.core import GlobalFont, Si, SiColor +from siui.gui.font import SiFont class SiComboBox(ABCSiComboBox): @@ -20,7 +19,7 @@ def __init__(self, *args, **kwargs): self.menu().setAnimationManager(AnimationManager.EXPAND) self.value_label = SiLabel(self) - self.value_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.value_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.value_label.setAlignment(Qt.AlignVCenter) self.value_label.setFixedHeight(32) self.value_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) diff --git a/siui/components/option_card/option_card.py b/siui/components/option_card/option_card.py index f038ec0..81d763a 100644 --- a/siui/components/option_card/option_card.py +++ b/siui/components/option_card/option_card.py @@ -4,8 +4,8 @@ from siui.components.widgets.abstracts.widget import SiWidget from siui.components.widgets.container import SiDenseHContainer from siui.components.widgets.label import SiLabel, SiSvgLabel -from siui.core import SiGlobal -from siui.core import Si +from siui.core import GlobalFont, Si, SiGlobal +from siui.gui import SiFont class SiOptionCardLinear(SiWidget): @@ -118,7 +118,7 @@ def __init__(self, *args, **kwargs): # 在 header 创建标题 self.title = SiLabel(self) self.title.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.title.setFont(SiGlobal.siui.fonts["M_BOLD"]) + self.title.setFont(SiFont.tokenized(GlobalFont.M_BOLD)) self.title.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) self.title.setFixedHeight(32) diff --git a/siui/components/page/page.py b/siui/components/page/page.py index 005f0d2..799d229 100644 --- a/siui/components/page/page.py +++ b/siui/components/page/page.py @@ -3,8 +3,9 @@ from siui.components.widgets.container import SiDenseHContainer, SiDenseVContainer from siui.components.widgets.label import SiLabel from siui.components.widgets.scrollarea import SiScrollArea -from siui.core import SiGlobal +from siui.core import SiGlobal, GlobalFont from siui.core import Si +from siui.gui import SiFont class SiPage(SiDenseVContainer): @@ -74,7 +75,7 @@ def setTitle(self, title: str): # 标题 self.title = SiLabel(self) - self.title.setFont(SiGlobal.siui.fonts["L_BOLD"]) + self.title.setFont(SiFont.tokenized(GlobalFont.L_BOLD)) self.title.setFixedHeight(32) self.title.setContentsMargins(64, 0, 0, 0) self.title.setAlignment(Qt.AlignLeft | Qt.AlignVCenter) diff --git a/siui/components/titled_widget_group/titled_widget_group.py b/siui/components/titled_widget_group/titled_widget_group.py index a283657..4937cf7 100644 --- a/siui/components/titled_widget_group/titled_widget_group.py +++ b/siui/components/titled_widget_group/titled_widget_group.py @@ -2,8 +2,9 @@ from siui.components.widgets.container import SiDenseVContainer from siui.components.widgets.label import SiLabel -from siui.core import SiGlobal +from siui.core import SiGlobal, GlobalFont from siui.core import Si +from siui.gui import SiFont class GroupTitle(SiLabel): @@ -14,7 +15,7 @@ def __init__(self, *args, **kwargs): # 标题文字 self.title_label = SiLabel(self) - self.title_label.setFont(SiGlobal.siui.fonts["M_BOLD"]) + self.title_label.setFont(SiFont.tokenized(GlobalFont.M_BOLD)) self.title_label.setFixedHeight(26) self.title_label.setAlignment(Qt.AlignBottom) self.title_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) diff --git a/siui/components/tooltip/tooltip.py b/siui/components/tooltip/tooltip.py index 2d4dd9e..b68bdf7 100644 --- a/siui/components/tooltip/tooltip.py +++ b/siui/components/tooltip/tooltip.py @@ -8,9 +8,8 @@ from siui.components.widgets.abstracts.widget import SiWidget from siui.components.widgets.label import SiLabel -from siui.core import SiGlobal -from siui.gui.font import GlobalFont, SiFont -from siui.core import Si +from siui.core import GlobalFont, Si, SiGlobal +from siui.gui import SiFont class ToolTipWindow(SiWidget): @@ -54,7 +53,7 @@ def __init__(self, *args, **kwargs): self.text_label.setFixedStyleSheet("padding: 8px") self.text_label.setSiliconWidgetFlag(Si.InstantResize) self.text_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.text_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.text_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) # 高光遮罩,当信息刷新时会闪烁一下 self.highlight_mask = SiLabel(self) diff --git a/siui/components/widgets/abstracts/line_edit.py b/siui/components/widgets/abstracts/line_edit.py index 3df3b67..3ff9530 100644 --- a/siui/components/widgets/abstracts/line_edit.py +++ b/siui/components/widgets/abstracts/line_edit.py @@ -4,8 +4,9 @@ from siui.components.widgets.abstracts.widget import SiWidget from siui.components.widgets.container import SiDenseHContainer from siui.components.widgets.label import SiLabel -from siui.core import SiColor +from siui.core import SiColor, GlobalFont from siui.core import SiGlobal +from siui.gui import SiFont class SiSimpleLineEdit(QLineEdit): @@ -15,7 +16,7 @@ def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # 设置字体 - self.setFont(SiGlobal.siui.fonts["S_NORMAL"]) + self.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) def reloadStyleSheet(self): self.setStyleSheet( diff --git a/siui/components/widgets/button.py b/siui/components/widgets/button.py index 0923723..b4813e8 100644 --- a/siui/components/widgets/button.py +++ b/siui/components/widgets/button.py @@ -3,12 +3,9 @@ from siui.components.widgets.abstracts import ABCButton, ABCPushButton, ABCToggleButton, LongPressThread from siui.components.widgets.label import SiIconLabel, SiLabel, SiSvgLabel -from siui.core import SiExpAnimation -from siui.core import SiColor -from siui.core import SiGlobal -from siui.core import Si +from siui.core import GlobalFont, Si, SiColor, SiExpAnimation, SiGlobal +from siui.gui import SiFont from siui.gui.color_group import SiColorGroup -from siui.gui.font import GlobalFont, SiFont class SiPushButton(ABCPushButton): @@ -25,7 +22,7 @@ def __init__(self, *args, **kwargs): # 实例化文本标签 self.label = SiIconLabel(self) self.label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.label.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter) # 设置偏移量,以保证在按钮明亮面显示 @@ -100,7 +97,7 @@ def __init__(self, *args, **kwargs): # 实例化文本标签 self.label = SiIconLabel(self) self.label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.label.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter) # 设置偏移量,以保证在按钮明亮面显示 @@ -159,7 +156,7 @@ def __init__(self, *args, **kwargs): # 实例化文本标签 self.label = SiIconLabel(self) self.label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) - self.label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.label.setAlignment(Qt.AlignVCenter | Qt.AlignHCenter) # 绑定到主体 @@ -214,7 +211,7 @@ def __init__(self, parent): # 创建选项文字 self.text_label = SiLabel(self) self.text_label.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) - self.text_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.text_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.text_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) def reloadStyleSheet(self): @@ -334,7 +331,7 @@ def __init__(self, parent): # 创建选项文字 self.text_label = SiLabel(self) self.text_label.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) - self.text_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + self.text_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.text_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) def reloadStyleSheet(self): diff --git a/siui/components/widgets/label.py b/siui/components/widgets/label.py index a8c3b33..ae40a2d 100644 --- a/siui/components/widgets/label.py +++ b/siui/components/widgets/label.py @@ -3,15 +3,14 @@ from PyQt5.QtSvg import QSvgWidget from siui.components.widgets.abstracts.label import ABCAnimatedLabel -from siui.core import SiQuickAlignmentManager -from siui.core import SiGlobal -from siui.core import Si +from siui.core import GlobalFont, Si, SiGlobal, SiQuickAlignmentManager +from siui.gui import SiFont class SiLabel(ABCAnimatedLabel): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) - super().setFont(SiGlobal.siui.fonts["S_NORMAL"]) + super().setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) class SiPixLabel(SiLabel): diff --git a/siui/components/widgets/table.py b/siui/components/widgets/table.py index 1b04ad5..882485f 100644 --- a/siui/components/widgets/table.py +++ b/siui/components/widgets/table.py @@ -1,8 +1,7 @@ from siui.components import SiLabel, SiMasonryContainer, SiScrollArea, SiWidget from siui.components.widgets.abstracts.table import ABCSiTabelManager, ABCSiTable, SiRow -from siui.core import SiColor -from siui.core import Si -from siui.gui import GlobalFont, SiFont +from siui.core import GlobalFont, Si, SiColor +from siui.gui import SiFont class SiTableValueManagerLabels(ABCSiTabelManager): @@ -21,7 +20,7 @@ def _widget_creator(self, col_index): def on_header_created(self, header: SiRow): for name in self.parent().column_names: new_label = SiLabel(self.parent()) - new_label.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + new_label.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) new_label.setTextColor(self.parent().colorGroup().fromToken(SiColor.TEXT_B)) new_label.setText(name) new_label.adjustSize() diff --git a/siui/core/__init__.py b/siui/core/__init__.py index 63601c5..47f349b 100644 --- a/siui/core/__init__.py +++ b/siui/core/__init__.py @@ -1,3 +1,4 @@ + from .alignment import SiQuickAlignmentManager from .animation import ( ABCSiAnimation, @@ -12,6 +13,10 @@ from .effect import SiQuickEffect from .enumrates import Si from .globals import NewGlobal, SiGlobal +from .token import FontStyle as FontStyle +from .token import GlobalFont as GlobalFont +from .token import GlobalFontSize as GlobalFontSize +from .token import GlobalFontWeight as GlobalFontWeight __all__ = ("SiQuickAlignmentManager", "ABCSiAnimation", "Curve", "SiAnimationGroup", "SiCounterAnimation", @@ -19,4 +24,6 @@ "SiColor", "SiQuickEffect", "Si", - "NewGlobal", "SiGlobal") + "NewGlobal", "SiGlobal", + "FontStyle", "GlobalFont", "GlobalFontSize", "GlobalFontWeight") + diff --git a/siui/core/globals.py b/siui/core/globals.py index c5c45be..4f3c488 100644 --- a/siui/core/globals.py +++ b/siui/core/globals.py @@ -2,7 +2,6 @@ from siui.core import SiColor from siui.gui.color_group import DarkColorGroup -from siui.gui.font import GlobalFontDict from siui.gui.icons.parser import SiGlobalIconPack @@ -30,7 +29,6 @@ class SiliconUIGlobal: # 字体字典,储存所有字体 # 值为 QFont 类型的字体 - fonts = GlobalFontDict.fonts def loadWindows(self, dictionary): SiliconUIGlobal.windows.update(dictionary) diff --git a/siui/core/token.py b/siui/core/token.py new file mode 100644 index 0000000..10ce4d0 --- /dev/null +++ b/siui/core/token.py @@ -0,0 +1,62 @@ +from enum import Enum + +from PyQt5.QtGui import QFont + + +class GlobalFontSize(Enum): + """Tokenized Global Font Size""" + + S = 14 + M = 20 + L = 24 + XL = 32 + + +class GlobalFontWeight(Enum): + """Tokenized Global Font Weight""" + + NORMAL = QFont.Weight.Normal + DEMI_BOLD = QFont.Weight.DemiBold + BOLD = QFont.Weight.Bold + + +class FontStyle(Enum): + """Tokenized Font Style""" + + REGULAR = QFont.Style.StyleNormal + ITALIC = QFont.Style.StyleItalic + OBLIQUE = QFont.Style.StyleOblique + + +class GlobalFont(Enum): + """Tokenized Global Font""" + + S_NORMAL = (GlobalFontSize.S, GlobalFontWeight.NORMAL, FontStyle.REGULAR) + M_NORMAL = (GlobalFontSize.M, GlobalFontWeight.NORMAL, FontStyle.REGULAR) + L_NORMAL = (GlobalFontSize.L, GlobalFontWeight.NORMAL, FontStyle.REGULAR) + XL_NORMAL = (GlobalFontSize.XL, GlobalFontWeight.NORMAL, FontStyle.REGULAR) + + S_NORMAL_ITALIC = (GlobalFontSize.S, GlobalFontWeight.NORMAL, FontStyle.ITALIC) + M_NORMAL_ITALIC = (GlobalFontSize.M, GlobalFontWeight.NORMAL, FontStyle.ITALIC) + L_NORMAL_ITALIC = (GlobalFontSize.L, GlobalFontWeight.NORMAL, FontStyle.ITALIC) + XL_NORMAL_ITALIC = (GlobalFontSize.XL, GlobalFontWeight.NORMAL, FontStyle.ITALIC) + + S_DEMI_BOLD = (GlobalFontSize.S, GlobalFontWeight.DEMI_BOLD, FontStyle.REGULAR) + M_DEMI_BOLD = (GlobalFontSize.M, GlobalFontWeight.DEMI_BOLD, FontStyle.REGULAR) + L_DEMI_BOLD = (GlobalFontSize.L, GlobalFontWeight.DEMI_BOLD, FontStyle.REGULAR) + XL_DEMI_BOLD = (GlobalFontSize.XL, GlobalFontWeight.DEMI_BOLD, FontStyle.REGULAR) + + S_DEMI_BOLD_ITALIC = (GlobalFontSize.S, GlobalFontWeight.DEMI_BOLD, FontStyle.ITALIC) + M_DEMI_BOLD_ITALIC = (GlobalFontSize.M, GlobalFontWeight.DEMI_BOLD, FontStyle.ITALIC) + L_DEMI_BOLD_ITALIC = (GlobalFontSize.L, GlobalFontWeight.DEMI_BOLD, FontStyle.ITALIC) + XL_DEMI_BOLD_ITALIC = (GlobalFontSize.XL, GlobalFontWeight.DEMI_BOLD, FontStyle.ITALIC) + + S_BOLD = (GlobalFontSize.S, GlobalFontWeight.BOLD, FontStyle.REGULAR) + M_BOLD = (GlobalFontSize.M, GlobalFontWeight.BOLD, FontStyle.REGULAR) + L_BOLD = (GlobalFontSize.L, GlobalFontWeight.BOLD, FontStyle.REGULAR) + XL_BOLD = (GlobalFontSize.XL, GlobalFontWeight.BOLD, FontStyle.REGULAR) + + S_BOLD_ITALIC = (GlobalFontSize.S, GlobalFontWeight.BOLD, FontStyle.ITALIC) + M_BOLD_ITALIC = (GlobalFontSize.M, GlobalFontWeight.BOLD, FontStyle.ITALIC) + L_BOLD_ITALIC = (GlobalFontSize.L, GlobalFontWeight.BOLD, FontStyle.ITALIC) + XL_BOLD_ITALIC = (GlobalFontSize.XL, GlobalFontWeight.BOLD, FontStyle.ITALIC) diff --git a/siui/gui/__init__.py b/siui/gui/__init__.py index d0f544f..d29cded 100644 --- a/siui/gui/__init__.py +++ b/siui/gui/__init__.py @@ -1,4 +1,4 @@ from siui.gui.color_group import * -from siui.gui.font import * from siui.gui.scale import * +from .font import SiFont diff --git a/siui/gui/font.py b/siui/gui/font.py new file mode 100644 index 0000000..df67ce0 --- /dev/null +++ b/siui/gui/font.py @@ -0,0 +1,41 @@ +from __future__ import annotations + +from typing import TYPE_CHECKING + +from PyQt5.QtGui import QFont + +from siui.core.token import FontStyle, GlobalFont, GlobalFontSize, GlobalFontWeight + +if TYPE_CHECKING: + from collections.abc import Sequence + + +class SiFont: + @staticmethod + def getFont( + families: Sequence[str] = ["Segoe UI", "Microsoft YaHei", "PingFang SC"], + size: int = 14, + weight: QFont.Weight = QFont.Weight.Normal, + italic: bool = False, + ) -> QFont: + font = QFont() + font.setFamilies(families) + font.setPixelSize(size) + font.setWeight(weight) + font.setItalic(italic) + return font + + @staticmethod + def fromToken(size: GlobalFontSize, weight: GlobalFontWeight, style: FontStyle) -> QFont: + """通过已经令牌化的字体属性构造字体""" + + return SiFont.getFont(size=size.value, weight=weight.value, italic=style == FontStyle.ITALIC) + + @staticmethod + def tokenized(token: GlobalFont) -> QFont: + """返回一个已经被令牌化的全局字体""" + + try: + return SiFont.fromToken(*token.value) + except KeyError: + raise ValueError(f"Invalid token: {token}") diff --git a/siui/gui/font/__init__.py b/siui/gui/font/__init__.py deleted file mode 100644 index dda06ec..0000000 --- a/siui/gui/font/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from siui.gui.font.font import SiFont, GlobalFontDict, GlobalFont \ No newline at end of file diff --git a/siui/gui/font/font.py b/siui/gui/font/font.py deleted file mode 100644 index 5b0154c..0000000 --- a/siui/gui/font/font.py +++ /dev/null @@ -1,91 +0,0 @@ - -from enum import Enum - -from PyQt5.QtGui import QFont - - -class SiFont: - @staticmethod - def getFont( - families=None, - size: int = 14, - weight: QFont.Weight = QFont.Weight.Normal, - italic: bool = False, - ) -> QFont: - if families is None: - families = ["Segoe UI", "Microsoft YaHei", "PingFang SC"] - font = QFont() - font.setFamilies(families) - font.setPixelSize(size) - font.setWeight(weight) - font.setItalic(italic) - return font - - @staticmethod - def fromToken(token) -> QFont: - try: - return token.value - except KeyError: - raise ValueError(f"Invalid token: {token}") - - -class GlobalFont(Enum): - # Normal - S_NORMAL = SiFont.getFont(size=14, weight=QFont.Weight.Normal, italic=False) - M_NORMAL = SiFont.getFont(size=20, weight=QFont.Weight.Normal, italic=False) - L_NORMAL = SiFont.getFont(size=24, weight=QFont.Weight.Normal, italic=False) - XL_NORMAL = SiFont.getFont(size=32, weight=QFont.Weight.Normal, italic=False) - - S_NORMAL_ITALIC = SiFont.getFont(size=14, weight=QFont.Weight.Normal, italic=True) - M_NORMAL_ITALIC = SiFont.getFont(size=20, weight=QFont.Weight.Normal, italic=True) - L_NORMAL_ITALIC = SiFont.getFont(size=24, weight=QFont.Weight.Normal, italic=True) - XL_NORMAL_ITALIC = SiFont.getFont(size=32, weight=QFont.Weight.Normal, italic=True) - - # Demi Bold - S_DEMI_BOLD = SiFont.getFont(size=14, weight=QFont.Weight.DemiBold, italic=False) - M_DEMI_BOLD = SiFont.getFont(size=20, weight=QFont.Weight.DemiBold, italic=False) - L_DEMI_BOLD = SiFont.getFont(size=24, weight=QFont.Weight.DemiBold, italic=False) - XL_DEMI_BOLD = SiFont.getFont(size=32, weight=QFont.Weight.DemiBold, italic=False) - - S_DEMI_BOLD_ITALIC = SiFont.getFont(size=14, weight=QFont.Weight.DemiBold, italic=True) - M_DEMI_BOLD_ITALIC = SiFont.getFont(size=20, weight=QFont.Weight.DemiBold, italic=True) - L_DEMI_BOLD_ITALIC = SiFont.getFont(size=24, weight=QFont.Weight.DemiBold, italic=True) - XL_DEMI_BOLD_ITALIC = SiFont.getFont(size=32, weight=QFont.Weight.DemiBold, italic=True) - - # Bold - S_BOLD = SiFont.getFont(size=14, weight=QFont.Weight.Bold, italic=False) - M_BOLD = SiFont.getFont(size=20, weight=QFont.Weight.Bold, italic=False) - L_BOLD = SiFont.getFont(size=24, weight=QFont.Weight.Bold, italic=False) - XL_BOLD = SiFont.getFont(size=32, weight=QFont.Weight.Bold, italic=False) - - S_BOLD_ITALIC = SiFont.getFont(size=14, weight=QFont.Weight.Bold, italic=True) - M_BOLD_ITALIC = SiFont.getFont(size=20, weight=QFont.Weight.Bold, italic=True) - L_BOLD_ITALIC = SiFont.getFont(size=24, weight=QFont.Weight.Bold, italic=True) - XL_BOLD_ITALIC = SiFont.getFont(size=32, weight=QFont.Weight.Bold, italic=True) - - -class GlobalFontDict: - fonts = {} - - fonts["S_NORMAL"] = GlobalFont.S_NORMAL.value - fonts["M_NORMAL"] = GlobalFont.M_NORMAL.value - fonts["L_NORMAL"] = GlobalFont.L_NORMAL.value - fonts["XL_NORMAL"] = GlobalFont.XL_NORMAL.value - - fonts["S_NORMAL_ITALIC"] = GlobalFont.S_NORMAL_ITALIC.value - fonts["M_NORMAL_ITALIC"] = GlobalFont.M_NORMAL_ITALIC.value - fonts["L_NORMAL_ITALIC"] = GlobalFont.L_NORMAL_ITALIC.value - fonts["XL_NORMAL_ITALIC"] = GlobalFont.XL_NORMAL_ITALIC.value - - fonts["S_BOLD"] = GlobalFont.S_BOLD.value - fonts["M_BOLD"] = GlobalFont.M_BOLD.value - fonts["L_BOLD"] = GlobalFont.L_BOLD.value - fonts["XL_BOLD"] = GlobalFont.XL_BOLD.value - - fonts["S_BOLD_ITALIC"] = GlobalFont.S_BOLD_ITALIC.value - fonts["M_BOLD_ITALIC"] = GlobalFont.M_BOLD_ITALIC.value - fonts["L_BOLD_ITALIC"] = GlobalFont.L_BOLD_ITALIC.value - fonts["XL_BOLD_ITALIC"] = GlobalFont.XL_BOLD_ITALIC.value - - def get_font_dict(self): - return self.fonts \ No newline at end of file diff --git a/siui/templates/application/components/layer/layer_main/layer_main.py b/siui/templates/application/components/layer/layer_main/layer_main.py index f9e3bc6..03398a2 100644 --- a/siui/templates/application/components/layer/layer_main/layer_main.py +++ b/siui/templates/application/components/layer/layer_main/layer_main.py @@ -1,9 +1,10 @@ from PyQt5.QtCore import Qt from siui.components import SiLabel, SiDenseVContainer, SiDenseHContainer, SiPixLabel -from siui.core import SiColor +from siui.core import SiColor, GlobalFont from siui.core import SiGlobal from siui.core import Si +from siui.gui import SiFont from siui.templates.application.components.page_view import PageView from ..layer import SiLayer @@ -35,7 +36,7 @@ def __init__(self, *args, **kwargs): # 应用标题 self.app_title = SiLabel(self) self.app_title.setAlignment(Qt.AlignVCenter | Qt.AlignLeft) - self.app_title.setFont(SiGlobal.siui.fonts["S_NORMAL"]) + self.app_title.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) self.app_title.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) self.app_title.setText("Silicon 应用模版") diff --git a/siui/templates/application/components/layer/layer_right_message_sidebar/layer_right_message_sidebar.py b/siui/templates/application/components/layer/layer_right_message_sidebar/layer_right_message_sidebar.py index 8eb77b2..d072f6a 100644 --- a/siui/templates/application/components/layer/layer_right_message_sidebar/layer_right_message_sidebar.py +++ b/siui/templates/application/components/layer/layer_right_message_sidebar/layer_right_message_sidebar.py @@ -1,12 +1,10 @@ from typing import Union -from siui.components import SiMasonryContainer, SiLabel -from siui.core import SiColor -from siui.core import SiQuickEffect -from siui.core import Si -from siui.gui import SiFont, GlobalFont +from siui.components import SiLabel, SiMasonryContainer +from siui.core import GlobalFont, Si, SiColor, SiQuickEffect +from siui.gui import SiFont + from .messagebox import SiSideMessageBox -from ..layer import SiLayer class MessageSidebar(SiMasonryContainer): @@ -50,7 +48,7 @@ def send(self, label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) label.setWordWrap(True) - label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) label.setFixedStyleSheet( "padding-top: 16px;" "padding-bottom: 16px;" @@ -66,7 +64,7 @@ def send(self, title_label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) title_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) title_label.setWordWrap(True) - title_label.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + title_label.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) title_label.setFixedStyleSheet( "padding-top: 16px;" "padding-bottom: 1px;" @@ -80,7 +78,7 @@ def send(self, description_label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) description_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) description_label.setWordWrap(True) - description_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + description_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) description_label.setFixedStyleSheet( "padding-top: 1px;" "padding-bottom: 16px;" diff --git a/siui/templates/application/components/message/sidebar.py b/siui/templates/application/components/message/sidebar.py index ea4668e..4897537 100644 --- a/siui/templates/application/components/message/sidebar.py +++ b/siui/templates/application/components/message/sidebar.py @@ -1,11 +1,10 @@ -import random + from typing import Union from siui.components import SiLabel from siui.components.widgets.container import SiMasonryContainer -from siui.core import SiColor -from siui.core import Si -from siui.gui import SiFont, GlobalFont +from siui.core import GlobalFont, Si, SiColor +from siui.gui import SiFont from siui.templates.application.components.message.box import SiSideMessageBox @@ -50,7 +49,7 @@ def send(self, label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) label.setWordWrap(True) - label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) label.setFixedStyleSheet( "padding-top: 16px;" "padding-bottom: 16px;" @@ -66,7 +65,7 @@ def send(self, title_label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) title_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) title_label.setWordWrap(True) - title_label.setFont(SiFont.fromToken(GlobalFont.S_BOLD)) + title_label.setFont(SiFont.tokenized(GlobalFont.S_BOLD)) title_label.setFixedStyleSheet( "padding-top: 16px;" "padding-bottom: 1px;" @@ -80,7 +79,7 @@ def send(self, description_label.setFixedWidth(380 - new_message_box.content().theme_wing_width - 32) description_label.setSiliconWidgetFlag(Si.AdjustSizeOnTextChanged) description_label.setWordWrap(True) - description_label.setFont(SiFont.fromToken(GlobalFont.S_NORMAL)) + description_label.setFont(SiFont.tokenized(GlobalFont.S_NORMAL)) description_label.setFixedStyleSheet( "padding-top: 1px;" "padding-bottom: 16px;"