Skip to content
This repository has been archived by the owner on May 8, 2023. It is now read-only.

Commit

Permalink
test notify property editor
Browse files Browse the repository at this point in the history
  • Loading branch information
892768447 committed Sep 16, 2018
1 parent 4e4b938 commit bdbb66d
Show file tree
Hide file tree
Showing 9 changed files with 381 additions and 204 deletions.
1 change: 1 addition & 0 deletions .settings/org.eclipse.core.resources.prefs
Original file line number Diff line number Diff line change
Expand Up @@ -15,5 +15,6 @@ encoding//Obsolete/Widgets/ButtonGroup.py=utf-8
encoding//Obsolete/Widgets/Label.py=utf-8
encoding//Obsolete/Widgets/ToolTip.py=utf-8
encoding//Plugins/Buttonplugin.py=utf-8
encoding//Test/uuuu.py=utf-8
encoding//Widgets/Button.py=utf-8
encoding/designer.py=utf-8
2 changes: 2 additions & 0 deletions Core/Colors.py
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ def toRgba(self):
"""返回rgba格式,如:255, 255, 255, 255"""
return '{}, {}, {}, {}'.format(self.red(), self.green(), self.blue(), self.alpha())


BlueJeans = Color('#4A89DC', hover=Color('#5D9CEC'))
Aqua = Color('#3BAFDA', hover=Color('#4FC1E9'))
Mint = Color('#37BC9B', hover=Color('#48CFAD'))
Expand All @@ -47,6 +48,7 @@ def toRgba(self):
MediumGray = Color('#AAB2BD', hover=Color('#CCD1D9'))
DarkGray = Color('#434A54', hover=Color('#656D78'))
White = Color(255, 255, 255, hover=Color('#CCD1D9'), pressed=Color('#CCD1D9'))
Black = Color(0, 0, 0)
Transparent = Color(255, 255, 255, 0)


Expand Down
95 changes: 40 additions & 55 deletions Core/Property.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,12 +9,10 @@
@description: 属性类
"""

from PyQt5.QtCore import pyqtProperty, Qt
from PyQt5.QtGui import QColor
from PyQt5.QtCore import pyqtProperty, pyqtSignal

from Core.Colors import MediumGray, Transparent, White
from Core.Template import Template
from Core.Themes import EnumThemes
from Core.Themes import EnumThemes, EnumThemesColors, ThemeMediumGray


__Author__ = """By: Irony
Expand All @@ -24,90 +22,77 @@
__Version__ = 1.0


class Property:
class Property(EnumThemes):

styleSheetChanged = pyqtSignal()

def __init__(self, *args, **kwargs):
super(Property, self).__init__(*args, **kwargs)
self._borderWidth = 0 # 默认 普通状态 边框宽度
self._borderWidthHover = 0 # 默认 悬停状态 边框宽度
self._borderWidthPressed = 5 # 默认 按下状态 边框宽度
self._borderColor = Transparent # 默认 普通状态 边框颜色
self._borderColorHover = Transparent # 默认 悬停状态 边框颜色
self._borderColorPressed = MediumGray.pressed # 默认 按下状态 边框颜色
self._borderRadius = 4 # 默认 普通状态 圆角半径
self._borderRadiusHover = 4 # 默认 悬停状态 圆角半径
self._borderRadiusPressed = 4 # 默认 按下状态 圆角半径
self._textColor = White # 默认 普通状态 文字颜色
self._textColorHover = White.hover # 默认 悬停状态 文字颜色
self._textColorPressed = White.pressed # 默认 按下状态 文字颜色
self._backgroundColor = MediumGray # 默认 普通状态 文字颜色
self._backgroundColorHover = MediumGray.hover # 默认 悬停状态 文字颜色
self._backgroundColorPressed = MediumGray.pressed # 默认 按下状态 文字颜色
self._colorTheme = EnumThemes.MediumGray
self._colorTheme = EnumThemes.MediumGray # 默认 主题
self._resetColorTheme()

def _resetColorTheme(self):
# AllThemes[self._colorTheme].update(self)
EnumThemesColors.get(self._colorTheme, ThemeMediumGray()).update(self)
self.update()

def resetBorderWidth(self):
"""重置普通状态下边框宽度"""
self._borderWidth = 0
self.update()
def resetColorTheme(self):
"""重置主题"""
self._colorTheme = EnumThemes.MediumGray
self._resetColorTheme()

@pyqtProperty(int, freset=resetBorderWidth)
def borderWidth(self) -> int:
"""获取普通状态下边框宽度"""
return self._borderWidth
@pyqtProperty(int, freset=resetColorTheme)
def colorTheme(self):
return self._colorTheme

@borderWidth.setter
def borderWidth(self, borderWidth: int):
"""设置普通状态下边框宽度"""
self._borderWidth = borderWidth
self.update()
@colorTheme.setter
def colorTheme(self, colorTheme):
self._colorTheme = colorTheme
self._resetColorTheme()

def resetBorderColor(self):
"""重置普通状态下边框颜色"""
self._borderColor = QColor(Qt.transparent)
def resetBorderRadius(self):
"""重置普通状态下边框宽度"""
self._borderRadius = 4
self.update()

@pyqtProperty(QColor, freset=resetBorderColor)
def borderColor(self) -> QColor:
"""获取普通状态下边框颜色"""
return self._borderColor
@pyqtProperty(int, freset=resetBorderRadius)
def borderRadius(self) -> int:
"""获取普通状态下边框圆角"""
return self._borderRadius

@borderColor.setter
def borderColor(self, borderColor: QColor):
"""设置普通状态下边框颜色"""
self._borderColor = borderColor
@borderRadius.setter
def borderRadius(self, borderRadius: int):
"""设置普通状态下边框圆角"""
self._borderRadius = borderRadius
self.update()

@property
def _properties(self):
return {
'_borderWidth': self._borderWidth,
'_borderWidthHover': self._borderWidthHover,
'_borderWidthPressed': self._borderWidthPressed,
'_borderColor': self._borderColor,
'_borderColorHover': self._borderColorHover,
'_borderColorPressed': self._borderColorPressed,
'_borderColor': self._borderColor.toRgba(),
'_borderColorHover': self._borderColorHover.toRgba(),
'_borderColorPressed': self._borderColorPressed.toRgba(),
'_borderRadius': self._borderRadius,
'_borderRadiusHover': self._borderRadiusHover,
'_borderRadiusPressed': self._borderRadiusPressed,
'_textColor': self._textColor,
'_textColorHover': self._textColorHover,
'_textColorPressed': self._textColorPressed,
'_backgroundColor': self._backgroundColor,
'_backgroundColorHover': self._backgroundColorHover,
'_backgroundColorPressed': self._backgroundColorPressed,
'_textColor': self._textColor.toRgba(),
'_textColorHover': self._textColorHover.toRgba(),
'_textColorPressed': self._textColorPressed.toRgba(),
'_backgroundColor': self._backgroundColor.toRgba(),
'_backgroundColorHover': self._backgroundColorHover.toRgba(),
'_backgroundColorPressed': self._backgroundColorPressed.toRgba(),
}

def generateStyle(self):
if not hasattr(self, 'StyleTpl') or not hasattr(self.StyleTpl, 'generate'):
return self.styleSheet()
return self.StyleTpl.generate(**self._properties).decode()


if __name__ == '__main__':
print(Template('border: {{ borderWidth }}px solid {{ borderColor }};'
).generate(borderWidth=2, borderColor='red').decode())
self.styleSheetChanged.emit()
return self.StyleTpl.generate(**self._properties()).decode()
Loading

0 comments on commit bdbb66d

Please sign in to comment.