From f037fa4fc339cace3430d43ab5ddf2e606ca3118 Mon Sep 17 00:00:00 2001
From: FrankCV2048 <1395405735@qq.com>
Date: Wed, 16 Oct 2024 23:18:25 +0800
Subject: [PATCH] =?UTF-8?q?update=20=E6=8B=9F=E5=A2=9E=E5=8A=A0=E7=82=B9?=
=?UTF-8?q?=E4=BD=8D?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
Image/login.svg | 1 +
Image/logout.svg | 1 +
Image/title_ico.png | Bin 0 -> 4345 bytes
TEST3.py | 90 +++++++++++++++++++++++++++++++
test.py | 127 +++++++++++++++++++++++++++++---------------
test2.py | 76 ++++++++++++++++++++++++++
test5.py | 40 ++++++++++++++
untitled.ui | 25 +++++++++
8 files changed, 318 insertions(+), 42 deletions(-)
create mode 100644 Image/login.svg
create mode 100644 Image/logout.svg
create mode 100644 Image/title_ico.png
create mode 100644 TEST3.py
create mode 100644 test2.py
create mode 100644 test5.py
diff --git a/Image/login.svg b/Image/login.svg
new file mode 100644
index 0000000..ccae57b
--- /dev/null
+++ b/Image/login.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Image/logout.svg b/Image/logout.svg
new file mode 100644
index 0000000..1346842
--- /dev/null
+++ b/Image/logout.svg
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/Image/title_ico.png b/Image/title_ico.png
new file mode 100644
index 0000000000000000000000000000000000000000..4d1031ccc50c077787b7decb2a777a24984262ab
GIT binary patch
literal 4345
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 0:
+ painter = QPainter(self)
+ painter.setRenderHint(QPainter.Antialiasing)
+ color = QColor(255, 255, 255)
+ color.setAlphaF(self._ripple_opacity)
+ painter.setBrush(QBrush(color))
+ painter.setPen(Qt.NoPen)
+ painter.drawEllipse(self.ripple_position, self._ripple_radius, self._ripple_radius)
+
+ def mousePressEvent(self, event):
+ if event.button() == Qt.LeftButton:
+ self.ripple_position = event.pos()
+ self.startRippleEffect()
+ super().mousePressEvent(event)
+
+ def startRippleEffect(self):
+ # 取消之前的动画
+ self.animation_group.stop()
+ self.animation_group.clear()
+
+ # 创建半径动画
+ radius_animation = QPropertyAnimation(self, b"rippleRadius")
+ radius_animation.setDuration(600)
+ radius_animation.setStartValue(0)
+ # 计算最大半径,确保覆盖按钮
+ max_radius = max(self.width(), self.height()) * 1.5
+ radius_animation.setEndValue(max_radius)
+ radius_animation.setEasingCurve(QEasingCurve.OutQuad)
+
+ # 创建透明度动画
+ opacity_animation = QPropertyAnimation(self, b"rippleOpacity")
+ opacity_animation.setDuration(600)
+ opacity_animation.setStartValue(0.5) # 初始透明度可以调整
+ opacity_animation.setEndValue(0.0)
+ opacity_animation.setEasingCurve(QEasingCurve.OutQuad)
+
+ # 将动画添加到动画组
+ self.animation_group.addAnimation(radius_animation)
+ self.animation_group.addAnimation(opacity_animation)
+ self.animation_group.start()
+
+ # 使用 @Property 装饰器正确定义属性
+ def getRippleRadius(self):
+ return self._ripple_radius
+
+ def setRippleRadius(self, radius):
+ self._ripple_radius = radius
+ self.update()
+
+ rippleRadius = Property(float, getRippleRadius, setRippleRadius)
+
+ def getRippleOpacity(self):
+ return self._ripple_opacity
+
+ def setRippleOpacity(self, opacity):
+ self._ripple_opacity = opacity
+ self.update()
+
+ rippleOpacity = Property(float, getRippleOpacity, setRippleOpacity)
+
+class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
+ self.setWindowTitle("水滴扩散按钮示例")
+ self.setFixedSize(400, 300)
- self.init_ui()
-
- def init_ui(self):
- # 创建一个垂直布局
- layout = QVBoxLayout()
-
- # 创建一个标签来显示滑块的值
- self.label = QLabel("当前值: 0", self)
- layout.addWidget(self.label)
-
- # 创建一个滑块
- self.slider = QSlider(Qt.Horizontal, self)
- self.slider.setMinimum(0)
- self.slider.setMaximum(100)
- self.slider.setValue(0) # 初始值设为0
- self.slider.setTickPosition(QSlider.TicksBelow)
- self.slider.setTickInterval(10)
- layout.addWidget(self.slider)
-
- # 创建一个按钮来获取滑块的当前值
- self.button = QPushButton("获取滑块值", self)
- self.button.clicked.connect(self.show_slider_value)
- layout.addWidget(self.button)
-
- # 设置窗口布局
- self.setLayout(layout)
-
- self.setWindowTitle('QSlider 示例')
-
- def show_slider_value(self):
- # 直接获取滑块的当前值并更新标签
- value = self.slider.value()
- print(f"滑块的值是: {value}") # 添加打印以调试
- self.label.setText(f"当前值: {value}")
+ self.button = RippleButton("点击我", self)
+ self.button.setGeometry(150, 130, 100, 40)
if __name__ == "__main__":
- app = QApplication([])
-
- window = SliderExample()
+ app = QApplication(sys.argv)
+ window = MainWindow()
window.show()
-
- app.exec()
+ sys.exit(app.exec())
diff --git a/test2.py b/test2.py
new file mode 100644
index 0000000..01ec96e
--- /dev/null
+++ b/test2.py
@@ -0,0 +1,76 @@
+from PySide6.QtWidgets import QApplication, QPushButton, QMainWindow
+from PySide6.QtGui import QPainter, QLinearGradient, QColor, QFont
+from PySide6.QtCore import Qt, QRectF
+import sys
+
+class GradientButton(QPushButton):
+ def __init__(self, text, parent=None):
+ super().__init__(text, parent)
+ # 设置按钮无边框
+ self.setFlat(True)
+ # 设置按钮文本对齐方式
+
+ # 设置按钮字体
+ self.setFont(QFont("Arial", 14, QFont.Bold))
+ # 启用鼠标追踪以便在悬停时重绘
+ self.setMouseTracking(True)
+ # 当前是否悬停
+ self.hover = False
+
+ def paintEvent(self, event):
+ painter = QPainter(self)
+ painter.setRenderHint(QPainter.Antialiasing)
+
+ # 获取按钮的矩形区域
+ rect = self.rect()
+
+ # 创建线性渐变,从中心线向上下渐变
+ gradient = QLinearGradient(rect.center().x(), rect.top(), rect.center().x(), rect.bottom())
+
+
+ gradient.setColorAt(0, QColor(225,225,225))
+ gradient.setColorAt(0.5, QColor('#1A1F38'))
+ gradient.setColorAt(1, QColor(225,225,225))
+
+ brush = gradient
+ painter.setBrush(brush)
+ painter.setPen(Qt.NoPen)
+
+ # 绘制圆角矩形作为按钮背景
+ radius = 2 # 圆角半径
+ painter.drawRoundedRect(QRectF(rect), radius, radius)
+
+ # 绘制按钮文本
+ painter.setPen(QColor('#E8E9EB')) # 设置字体为白色
+ painter.drawText(rect, Qt.AlignCenter, self.text())
+
+ def enterEvent(self, event):
+ self.hover = True
+ self.update() # 触发重绘
+ super().enterEvent(event)
+
+ def leaveEvent(self, event):
+ self.hover = False
+ self.update() # 触发重绘
+ super().leaveEvent(event)
+
+class MainWindow(QMainWindow):
+ def __init__(self):
+ super().__init__()
+ self.setWindowTitle("中心线性渐变按钮示例")
+ self.setFixedSize(400, 300)
+
+ # 创建自定义渐变按钮
+ self.button = GradientButton("点击我", self)
+ self.button.setGeometry(100, 130, 100, 40)
+ # 连接按钮点击事件
+ self.button.clicked.connect(self.on_button_click)
+
+ def on_button_click(self):
+ print("按钮被点击了!")
+
+if __name__ == "__main__":
+ app = QApplication(sys.argv)
+ window = MainWindow()
+ window.show()
+ sys.exit(app.exec())
diff --git a/test5.py b/test5.py
new file mode 100644
index 0000000..49baf23
--- /dev/null
+++ b/test5.py
@@ -0,0 +1,40 @@
+from PySide6.QtWidgets import QApplication, QWidget, QVBoxLayout, QPushButton
+import sys
+
+app = QApplication(sys.argv)
+
+window = QWidget()
+layout = QVBoxLayout()
+
+# 创建按钮
+button = QPushButton("Button")
+
+# 使用 QSS 设置按钮样式
+window.setStyleSheet("""
+ QPushButton {
+ background-color: #4CAF50; /* 按钮背景色 */
+ color: white; /* 按钮文本颜色 */
+ padding: 10px; /* 按钮内边距 */
+ border: none; /* 移除所有默认边框 */
+ border-right: 20px solid white; /* 仅设置右边的边框 */
+ background-color: qlineargradient(x1: 0.5, y1: 0, x2: 0.5, y2: 1, stop: 0 #4CAF50, stop: 0.5 rgba(0, 235, 0, 0), stop: 1 #4CAF50);
+ border-width: 2px; /* 边框宽度 */
+ border-radius: 5px; /* 按钮圆角 */
+ }
+ QPushButton:hover {
+ background-color: #45a049; /* 悬停时背景色 */
+ }
+""")
+
+##
+
+# border-color:qradialgradient(cx: 0.5, cy: 0.5
+# , radius: 0.8, fx:0.5 ,fy:0.5,
+# stop: 0 rgba(255, 255, 255, 255),
+# stop: 1 rgba(19, 36, 69, 255));
+
+layout.addWidget(button)
+window.setLayout(layout)
+window.show()
+
+sys.exit(app.exec())
diff --git a/untitled.ui b/untitled.ui
index 84cdc63..2276c30 100644
--- a/untitled.ui
+++ b/untitled.ui
@@ -1020,6 +1020,31 @@ background-color:#1cb052;
+
+
+
+ 84
+ 120
+ 101
+ 51
+
+
+
+ * {
+ background: qradialgradient(cx: 0.5, cy: 0.1
+, radius: 0.8, fx:0.5 ,fy:0,
+ stop: 0 rgba(255,255,255, 255),
+ stop: 1 rgba(33, 150, 243, 255));
+font: 9pt "楷体";
+border: 1px solid #dcdfe6;
+border-radius: 10px;
+}
+
+
+
+ PushButton
+
+