Skip to content

Commit 0d6a1d1

Browse files
authored
Merge pull request #57 from ljzloser/master
更新界面优化
2 parents bec5913 + 4ba1f31 commit 0d6a1d1

3 files changed

Lines changed: 64 additions & 8 deletions

File tree

media/unfold.png

3.18 KB
Loading

src/CheckUpdateGui.py

Lines changed: 61 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22
QSizePolicy, QPushButton, QFrame, QMessageBox, QFormLayout, QProgressDialog, QTextEdit, QComboBox
33
from githubApi import GitHub, Release, SourceManager, PingThread
44
from PyQt5.QtCore import QObject, pyqtSlot, Qt, pyqtSignal, QUrl, QPropertyAnimation, \
5-
QRect, QSize, pyqtProperty, QVariantAnimation,QDateTime
6-
from PyQt5.QtGui import QDesktopServices, QFont, QIcon, QPainter, QPixmap, QPaintEvent
5+
QRect, QSize, pyqtProperty, QVariantAnimation,QDateTime,QEvent,QEasingCurve
6+
from PyQt5.QtGui import QDesktopServices, QFont, QIcon, QMouseEvent, QPainter, QPixmap, QPaintEvent,QEnterEvent
77

88

99
class AnimationButton(QPushButton):
@@ -14,6 +14,7 @@ def __init__(self, parent=None):
1414
self.animation = QVariantAnimation(self)
1515
self.animation.valueChanged.connect(self.setRotate)
1616
self.__rotate = 0
17+
self.setFixedSize(20, 20)
1718

1819
def rotate(self):
1920
return self.__rotate
@@ -27,11 +28,13 @@ def paintEvent(self, event):
2728
super().paintEvent(event)
2829
if self.pixmap is not None:
2930
painter = QPainter(self)
30-
painter.setRenderHint(QPainter.RenderHint.Antialiasing)
31-
painter.translate(self.width() / 2, self.height() / 2)
31+
painter.setRenderHint(QPainter.Antialiasing)
32+
painter.translate(self.width() // 2, self.height() // 2)
33+
size = self.width() if self.width() < self.height() else self.height()
3234
painter.rotate(self.rotate())
33-
painter.drawPixmap(-(self.width()-10) // 2, -(self.height()-10) //
34-
2, self.pixmap.scaled(self.width() - 10, self.height() - 10))
35+
painter.drawPixmap(-size// 2, -size //
36+
2, self.pixmap.scaled(size,size))
37+
self.setMask(self.pixmap.scaled(size,size).mask())
3538

3639
def animationStart(self, check):
3740
if check:
@@ -51,6 +54,7 @@ def __init__(self, release: Release, mode=">", parent=None, r_path=""):
5154
super().__init__(parent)
5255
self.release: Release = release
5356
self.showButton = AnimationButton()
57+
self.showButton.setToolTip(self.tr("unfold"))
5458
self.showButton.setCheckable(True)
5559
self.showButton.pixmap = QPixmap(str(r_path.with_name('media').joinpath('unfold.png')).replace("\\", "/"))
5660
self.dateTimeLabel = QLabel()
@@ -130,9 +134,9 @@ def initUi(self):
130134
else:
131135
# 样式表红色背景
132136
rgbStr = "rgb(249, 179, 163)"
133-
# label字体微软雅黑Ui,大小13
137+
# label字体微软雅黑Ui,大小13,圆角 8
134138
self.setStyleSheet(
135-
f"QFrame{{background-color:{rgbStr}; font-family:Microsoft YaHei UI; font-size:14px;}}")
139+
f"QFrame{{background-color:{rgbStr}; font-family:Microsoft YaHei UI; font-size:14px; border-radius: 5px;}}")
136140

137141
def initConnect(self):
138142
self.showButton.clicked.connect(self.showButtonClicked)
@@ -141,19 +145,24 @@ def initConnect(self):
141145
def showButtonClicked(self, checked: bool):
142146
self.formWidget.setVisible(True)
143147
animation = QPropertyAnimation(self.formWidget, b"size", self)
148+
easingCurveType = QEasingCurve.Type.OutBack if checked else QEasingCurve.Type.InBack
149+
animation.setEasingCurve(easingCurveType)
144150
animation2 = QPropertyAnimation(self, b"size", self)
151+
animation2.setEasingCurve(easingCurveType)
145152
animation.setDuration(300)
146153
animation2.setDuration(300)
147154
start: QSize = None
148155
end: QSize = None
149156
start1: QSize = None
150157
end1: QSize = None
151158
if checked:
159+
self.showButton.setToolTip(QObject.tr(self, "fold"))
152160
start = QSize(self.width(), 0)
153161
start1 = QSize(self.width(), self.titleWidget.height())
154162
end = QSize(self.width(), self.formWidget.sizeHint().height())
155163
end1 = QSize(self.width(), self.sizeHint().height())
156164
else:
165+
self.showButton.setToolTip(QObject.tr(self, "unfold"))
157166
start = QSize(self.width(), self.formWidget.sizeHint().height())
158167
start1 = QSize(self.width(), self.sizeHint().height())
159168
end = QSize(self.width(), 0)
@@ -174,9 +183,48 @@ def resWidth(self):
174183
area:QScrollArea = self.parentWidget().parentWidget().parentWidget()
175184
width = area.verticalScrollBar().width() if area.verticalScrollBar().isVisible() else 0
176185
self.resize(area.width() - width, self.height())
186+
187+
def mousePressEvent(self, a0: QMouseEvent) -> None:
188+
super().mousePressEvent(a0)
189+
if self.titleWidget.geometry().contains(a0.pos()) and a0.button() == Qt.LeftButton:
190+
self.showButton.click()
191+
def __setStyleSheet(self,isEnter:bool):
192+
rgbStr = ""
193+
if self.mode == ">":
194+
# 样式表绿色
195+
rgbStr = "rgb(200,255,250)"
196+
elif self.mode == "=":
197+
# 样式表蓝色
198+
rgbStr = "rgb(200,216,230)"
199+
else:
200+
# 样式表红色背景
201+
rgbStr = "rgb(249, 179, 163)"
202+
203+
204+
if isEnter:
205+
# label字体微软雅黑Ui,大小13,圆角 8,1px的蓝色边框,只针对ReleaseFrame
206+
self.setStyleSheet(
207+
f"""QFrame{{background-color:{rgbStr}; font-family:Microsoft YaHei UI; font-size:14px; border-radius: 5px;}}
208+
ReleaseFrame{{border: 1px solid blue;}}
209+
""")
210+
else:
211+
# label字体微软雅黑Ui,大小13,圆角 8
212+
self.setStyleSheet(
213+
f"QFrame{{background-color:{rgbStr}; font-family:Microsoft YaHei UI; font-size:14px; border-radius: 5px;}}")
214+
def enterEvent(self, a0: QEnterEvent) -> None:
215+
self.__setStyleSheet(True)
216+
return super().enterEvent(a0)
217+
218+
def leaveEvent(self, a0: QEvent) -> None:
219+
self.__setStyleSheet(False)
220+
return super().leaveEvent(a0)
221+
177222
class CheckUpdateGui(QDialog):
178223
def __init__(self, github: GitHub, parent=None):
179224
super().__init__(parent.mainWindow)
225+
self.setWindowTitle(QObject.tr(self, "CheckUpdate"))
226+
# 去掉问号
227+
self.setWindowFlags(self.windowFlags() & ~Qt.WindowContextHelpButtonHint)
180228
self.r_path = parent.r_path
181229
self.github: GitHub = github
182230
self.github.setParent(self)
@@ -257,6 +305,8 @@ def checkUpdate(self, releases: list[Release]):
257305
widget = QWidget()
258306
layout = QVBoxLayout()
259307
layout.setContentsMargins(0, 0, 0, 0)
308+
# 间隔设置为2px
309+
layout.setSpacing(2)
260310
for release in releases:
261311
frame = ReleaseFrame(
262312
release, self.github.compareVersion(release.tag_name), r_path=self.r_path)
@@ -273,6 +323,9 @@ def checkUpdate(self, releases: list[Release]):
273323
self.releaseArea.setWidget(widget)
274324

275325
def showError(self, msg: str):
326+
widget = self.releaseArea.widget()
327+
if widget is not None:
328+
widget.deleteLater()
276329
QMessageBox.critical(self, QObject.tr(self, "Error"), msg)
277330

278331
def showDownloadDialog(self, release: Release):

src/githubApi.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ def isNeedUpdate(self,isAsync:bool = True) -> bool | str | None:
226226

227227
nam = QNetworkAccessManager(self)
228228
request = QNetworkRequest(QUrl(self.latestReleaseUrl))
229+
request.setAttribute(QNetworkRequest.Attribute.FollowRedirectsAttribute,True)
229230
reply = nam.get(request)
230231
reply.setObjectName(str(uuid.uuid1()))
231232
self.__replyDict[reply.objectName()] = reply
@@ -269,6 +270,7 @@ def latestRelease(self,isAsync:bool = True) -> Release | str | None:
269270

270271
nam = QNetworkAccessManager(self)
271272
request = QNetworkRequest(QUrl(self.latestReleaseUrl))
273+
request.setAttribute(QNetworkRequest.Attribute.FollowRedirectsAttribute,True)
272274
reply = nam.get(request)
273275
reply.setObjectName(str(uuid.uuid1()))
274276
self.__replyDict[reply.objectName()] = reply
@@ -307,6 +309,7 @@ def releases(self,isAsync:bool = True) -> list | str | None:
307309
"""
308310
nam = QNetworkAccessManager(self)
309311
request = QNetworkRequest(QUrl(self.releasesUrl))
312+
request.setAttribute(QNetworkRequest.Attribute.FollowRedirectsAttribute,True)
310313
reply = nam.get(request)
311314
reply.setObjectName(str(uuid.uuid1()))
312315
self.__replyDict[reply.objectName()] = reply

0 commit comments

Comments
 (0)