Skip to content

Commit 25dcbe5

Browse files
committed
theme test
1 parent c01e7d7 commit 25dcbe5

File tree

12 files changed

+215
-97
lines changed

12 files changed

+215
-97
lines changed

.settings/org.eclipse.core.resources.prefs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ encoding//Widgets/MainWindow.py=utf-8
5252
encoding//Widgets/MainWindowBase.py=utf-8
5353
encoding//Widgets/Skins/ColourfulWidget.py=utf-8
5454
encoding//Widgets/Skins/PictureWidget.py=utf-8
55+
encoding//Widgets/Skins/SkinBaseWidget.py=utf-8
5556
encoding//Widgets/Skins/ThemeWidget.py=utf-8
5657
encoding//Widgets/ToolTip.py=utf-8
5758
encoding//Widgets/TreeView.py=utf-8

Resources/Themes/Dark/preview.png

-3.55 KB
Loading
-2.87 KB
Loading

UiFiles/ScrollArea.ui

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -31,22 +31,22 @@
3131
</property>
3232
<item>
3333
<widget class="QScrollArea" name="scrollArea">
34+
<property name="frameShape">
35+
<enum>QFrame::NoFrame</enum>
36+
</property>
3437
<property name="horizontalScrollBarPolicy">
3538
<enum>Qt::ScrollBarAlwaysOff</enum>
3639
</property>
3740
<property name="widgetResizable">
3841
<bool>true</bool>
3942
</property>
40-
<property name="alignment">
41-
<set>Qt::AlignCenter</set>
42-
</property>
4343
<widget class="QWidget" name="scrollAreaWidgetContents">
4444
<property name="geometry">
4545
<rect>
4646
<x>0</x>
4747
<y>0</y>
48-
<width>898</width>
49-
<height>610</height>
48+
<width>900</width>
49+
<height>612</height>
5050
</rect>
5151
</property>
5252
<layout class="QGridLayout" name="gridLayout">

UiFiles/Ui_ScrollArea.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ def setupUi(self, FormScrollArea):
1717
self.horizontalLayout.setSpacing(0)
1818
self.horizontalLayout.setObjectName("horizontalLayout")
1919
self.scrollArea = QtWidgets.QScrollArea(FormScrollArea)
20+
self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame)
2021
self.scrollArea.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
2122
self.scrollArea.setWidgetResizable(True)
22-
self.scrollArea.setAlignment(QtCore.Qt.AlignCenter)
2323
self.scrollArea.setObjectName("scrollArea")
2424
self.scrollAreaWidgetContents = QtWidgets.QWidget()
25-
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 898, 610))
25+
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 900, 612))
2626
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
2727
self.gridLayout = QtWidgets.QGridLayout(self.scrollAreaWidgetContents)
2828
self.gridLayout.setSizeConstraint(QtWidgets.QLayout.SetFixedSize)

Utils/CommonUtil.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,11 +144,18 @@ class _Signals(QObject):
144144

145145
# 添加多彩item
146146
colourfulItemAdded = pyqtSignal(int, int, str, object)
147-
# 添加item完成
147+
# 添加多彩item完成
148148
colourfulItemAddFinished = pyqtSignal()
149149
# 多彩item点击,色彩
150150
colourfulItemClicked = pyqtSignal(str, object)
151151

152+
# 添加主题item
153+
themeItemAdded = pyqtSignal(int, int, str, object)
154+
# 添加主题item完成
155+
themeItemAddFinished = pyqtSignal()
156+
# 主推item点击,路径
157+
themeItemClicked = pyqtSignal(str, object)
158+
152159

153160
# 说白了就是全局信号定义
154161
Signals = _Signals()

Utils/Constants.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
LogFormatter = '[%(asctime)s %(name)s] %(levelname)-8s %(message)s'
4040
LogFile = 'Resources/Data/app.log'
4141

42+
DirThemes = 'Resources/Themes' # 主题目录
4243
DirErrors = 'Resources/Data/Errors' # 错误日志目录
4344
DirProject = 'Resources/Data/Projects' # 本地项目目录
4445
DirProjects = 'Resources/Data/Projects/PyQt' # 本地项目目录

Utils/ThemeThread.py

Lines changed: 51 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,24 @@
99
@file: Utils.ThemeThread
1010
@description:
1111
"""
12+
from pathlib import Path
13+
1214
from PyQt5.QtCore import QObject, QThread
1315
from PyQt5.QtGui import QLinearGradient, QColor
1416

1517
from Utils.CommonUtil import AppLog, Signals
18+
from Utils.Constants import DirThemes
1619

1720

1821
__Author__ = "Irony"
1922
__Copyright__ = "Copyright (c) 2019"
2023

2124

25+
def splistList(src, length):
26+
# 等分列表
27+
return [src[i:i + length] for i in range(len(src)) if i % length == 0]
28+
29+
2230
class ColourfulThread(QObject):
2331
"""获取所有的颜色方案
2432
"""
@@ -65,7 +73,7 @@ def run(self):
6573
acolor.setColorAt(0, acolor.startColor)
6674
acolor.setColorAt(1, acolor.endColor)
6775

68-
defaults = self.splistList([
76+
defaults = splistList([
6977
[self.tr('MidnightParis'), mcolor], # 午夜巴黎
7078
[self.tr('PrimroseGreenOnion'), pcolor], # 樱草青葱
7179
[self.tr('AutumnSun'), acolor], # 秋日暖阳
@@ -91,6 +99,45 @@ def run(self):
9199
Signals.colourfulItemAddFinished.emit()
92100
AppLog.info('colourful thread end')
93101

94-
def splistList(self, src, length):
95-
# 等分列表
96-
return [src[i:i + length] for i in range(len(src)) if i % length == 0]
102+
103+
class ThemeThread(QObject):
104+
"""获取所有的主题(本地和云端)
105+
"""
106+
107+
def __init__(self, width, height, *args, **kwargs):
108+
super(ThemeThread, self).__init__(*args, **kwargs)
109+
self.width = width
110+
self.height = height
111+
112+
@classmethod
113+
def start(cls, width, height, parent=None):
114+
"""启动线程
115+
:param cls:
116+
:param width: 宽度
117+
:param width: 高度
118+
:param parent:
119+
"""
120+
cls._thread = QThread(parent)
121+
cls._worker = ThemeThread(width, height)
122+
cls._worker.moveToThread(cls._thread)
123+
cls._thread.started.connect(cls._worker.run)
124+
cls._thread.finished.connect(cls._worker.deleteLater)
125+
cls._thread.start()
126+
AppLog.info('theme thread started')
127+
128+
def run(self):
129+
AppLog.info('start get all theme')
130+
131+
defaults = [[p.parent.name, str(p)]
132+
for p in Path(DirThemes).rglob('style.qss')]
133+
134+
defaults = splistList(defaults, 5)
135+
136+
for row, default in enumerate(defaults):
137+
for col, (name, path) in enumerate(default):
138+
Signals.themeItemAdded.emit(row, col, name, path)
139+
QThread.msleep(100)
140+
QThread.yieldCurrentThread()
141+
142+
Signals.themeItemAddFinished.emit()
143+
AppLog.info('theme thread end')

Widgets/Dialogs/SkinDialog.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@
99
@file: Dialogs.SkinDialog
1010
@description:
1111
"""
12-
from PyQt5.QtCore import Qt
1312

14-
from Widgets.Dialogs.MoveDialog import MoveDialog
1513
from UiFiles.Ui_SkinDialog import Ui_FormSkinDialog
1614
from Utils.ThemeManager import ThemeManager
15+
from Widgets.Dialogs.MoveDialog import MoveDialog
1716

1817

1918
__Author__ = "Irony"
@@ -31,6 +30,7 @@ def __init__(self, *args, **kwargs):
3130
# self.setWindowFlags(self.windowFlags() | Qt.FramelessWindowHint)
3231
# 加载鼠标样式
3332
ThemeManager.loadCursor(self)
33+
self.on_tabWidget_currentChanged(0)
3434

3535
def on_tabWidget_currentChanged(self, index):
3636
self.tabWidget.widget(index).init()

Widgets/Skins/ColourfulWidget.py

Lines changed: 7 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -7,95 +7,26 @@
77
@site: https://pyqt5.com https://github.com/892768447
88
@email: 892768447@qq.com
99
@file: Widgets.Skins.ColourfulWidget
10-
@description:
10+
@description: 多彩控件
1111
"""
12-
from PyQt5.QtCore import QSize, Qt
13-
from PyQt5.QtGui import QPainter, QBrush, QColor
14-
from PyQt5.QtWidgets import QWidget, QPushButton
1512

16-
from UiFiles.Ui_ScrollArea import Ui_FormScrollArea
13+
from PyQt5.QtWidgets import QPushButton
14+
1715
from Utils.CommonUtil import Signals
1816
from Utils.ThemeManager import ThemeManager
1917
from Utils.ThemeThread import ColourfulThread
18+
from Widgets.Skins.SkinBaseWidget import SkinBaseWidget, SkinBaseItemWidget,\
19+
PixmapWidth, PixmapHeight
2020

2121

2222
__Author__ = "Irony"
2323
__Copyright__ = "Copyright (c) 2019"
2424

25-
PixmapWidth = 158
26-
PixmapHeight = 152 # 图片大小
27-
MarginBottom = 26 # 底部文字
28-
29-
30-
class ColourfulItemWidget(QWidget):
31-
32-
def __init__(self, name, color, *args, **kwargs):
33-
super(ColourfulItemWidget, self).__init__(*args, **kwargs)
34-
# 加载鼠标样式
35-
ThemeManager.loadCursor(self, ThemeManager.CursorPointer)
36-
self.name = name
37-
self.color = color
38-
self.hovered = False
39-
self.colorHover = QColor(0, 0, 0, 40)
40-
self.textColor = QColor(102, 102, 102)
41-
42-
def mousePressEvent(self, event):
43-
super(ColourfulItemWidget, self).mousePressEvent(event)
44-
self.hovered = True
45-
self.textColor = QColor(18, 183, 245)
46-
self.update()
47-
48-
def mouseReleaseEvent(self, event):
49-
super(ColourfulItemWidget, self).mouseReleaseEvent(event)
50-
self.hovered = False
51-
self.textColor = QColor(102, 102, 102)
52-
self.update()
53-
Signals.colourfulItemClicked.emit(self.name, self.color)
54-
55-
def enterEvent(self, event):
56-
super(ColourfulItemWidget, self).enterEvent(event)
57-
self.hovered = True
58-
self.textColor = QColor(Qt.black)
59-
self.update()
60-
61-
def leaveEvent(self, event):
62-
super(ColourfulItemWidget, self).leaveEvent(event)
63-
self.hovered = False
64-
self.textColor = QColor(102, 102, 102)
65-
self.update()
66-
67-
def paintEvent(self, event):
68-
super(ColourfulItemWidget, self).paintEvent(event)
69-
painter = QPainter(self)
70-
painter.setRenderHint(QPainter.SmoothPixmapTransform)
71-
# 绘制颜色方块
72-
painter.save()
73-
painter.setPen(Qt.NoPen)
74-
painter.setBrush(QBrush(self.color))
75-
painter.drawRoundedRect(
76-
0, 0, PixmapWidth, PixmapHeight, 2, 2)
77-
if self.hovered:
78-
# 绘制一层灰色
79-
painter.setBrush(QBrush(self.colorHover))
80-
painter.drawRoundedRect(
81-
0, 0, PixmapWidth, PixmapHeight, 2, 2)
82-
painter.restore()
83-
# 绘制文字
84-
painter.setPen(self.textColor)
85-
painter.drawText(0, 0, PixmapWidth, PixmapHeight + MarginBottom,
86-
Qt.AlignHCenter | Qt.AlignBottom, self.name)
87-
painter.end()
88-
89-
def sizeHint(self):
90-
return QSize(PixmapWidth, PixmapHeight + MarginBottom)
91-
9225

93-
class ColourfulWidget(QWidget, Ui_FormScrollArea):
26+
class ColourfulWidget(SkinBaseWidget):
9427

9528
def __init__(self, *args, **kwargs):
9629
super(ColourfulWidget, self).__init__(*args, **kwargs)
97-
self.setupUi(self)
98-
self.setAttribute(Qt.WA_StyledBackground, True)
9930
Signals.colourfulItemAdded.connect(self.onColourfulItemAdded)
10031
Signals.colourfulItemAddFinished.connect(
10132
self.onColourfulItemAddFinished)
@@ -137,4 +68,4 @@ def onColourfulItemAdded(self, row, col, name, color):
13768
self.lastRow = row
13869
self.lastCol = col
13970
self.gridLayout.addWidget(
140-
ColourfulItemWidget(name, color, self), row, col)
71+
SkinBaseItemWidget(name, color, Signals.colourfulItemClicked, self), row, col)

0 commit comments

Comments
 (0)