diff --git a/QSlider/LfSlider.py b/QSlider/LfSlider.py new file mode 100644 index 0000000..5a6116a --- /dev/null +++ b/QSlider/LfSlider.py @@ -0,0 +1,82 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +""" +Created on 2021/4/9 +@author: Irony +@site: https://github.com/PyQt5 +@email: 892768447@qq.com +@file: LfSlider +@description: 降低值变化频率 +""" +from datetime import datetime + +from PyQt5.QtCore import pyqtSignal, QTimer, Qt +from PyQt5.QtWidgets import QSlider, QWidget, QVBoxLayout, QPlainTextEdit, QHBoxLayout, QGroupBox + + +class LfSlider(QSlider): + valueChanged = pyqtSignal(int) + + def __init__(self, *args, **kwargs): + delay = kwargs.pop('delay', 500) + super(LfSlider, self).__init__(*args, **kwargs) + self.lastValue = self.value() + self.uTimer = QTimer(self) + self.uTimer.timeout.connect(self.onValueChanged) + self.uTimer.start(delay) + + def onValueChanged(self): + if self.lastValue != self.value(): + self.lastValue = self.value() + self.valueChanged.emit(self.lastValue) + + +class TestWindow(QWidget): + + def __init__(self, *args, **kwargs): + super(TestWindow, self).__init__(*args, **kwargs) + layout = QHBoxLayout(self) + + # 左侧原始 + left_group = QGroupBox('原始QSlider', self) + left_layout = QVBoxLayout(left_group) + self.leftLabel = QPlainTextEdit(self) + left_layout.addWidget(self.leftLabel) + + self.leftSlider = QSlider(Qt.Horizontal, self) + self.leftSlider.valueChanged.connect(self.onLeftChanged) + left_layout.addWidget(self.leftSlider) + + layout.addWidget(left_group) + + # 右侧低频率变化 + right_group = QGroupBox('LfSlider', self) + right_layout = QVBoxLayout(right_group) + self.rightLabel = QPlainTextEdit(self) + right_layout.addWidget(self.rightLabel) + + self.rightSlider = LfSlider(Qt.Horizontal, self) + self.rightSlider.valueChanged.connect(self.onRightChanged) + right_layout.addWidget(self.rightSlider) + + layout.addWidget(right_group) + + def onLeftChanged(self, value): + self.leftLabel.appendPlainText(datetime.now().strftime("[%H:%M:%S.%f] ") + str(value)) + + def onRightChanged(self, value): + self.rightLabel.appendPlainText(datetime.now().strftime("[%H:%M:%S.%f] ") + str(value)) + + +if __name__ == '__main__': + import sys + import cgitb + + cgitb.enable(format='text') + from PyQt5.QtWidgets import QApplication + + app = QApplication(sys.argv) + w = TestWindow() + w.show() + sys.exit(app.exec_()) diff --git a/QSlider/README.md b/QSlider/README.md index 488c293..1dc8803 100644 --- a/QSlider/README.md +++ b/QSlider/README.md @@ -3,6 +3,7 @@ - 目录 - [滑动条点击定位](#1滑动条点击定位) - [双层圆环样式](#2双层圆环样式) + - [低频率值变化](#3低频率值变化) ## 1、滑动条点击定位 [运行 ClickJumpSlider.py](ClickJumpSlider.py) @@ -43,4 +44,11 @@ def mousePressEvent(self, event): [运行 QssQSlider.py](QssQSlider.py) | [运行 PaintQSlider.py](PaintQSlider.py) ![QssQSlider](ScreenShot/QssQSlider.gif) -![PaintQSlider](ScreenShot/PaintQSlider.gif) \ No newline at end of file +![PaintQSlider](ScreenShot/PaintQSlider.gif) + +## 3、低频率值变化 +[运行 LfSlider.py](LfSlider.py) + +覆盖了`valueChanged`信号,通过使用定时器来延迟发送值变化,如果无法覆盖信号则可以自定义一个新的信号 + +![LfSlider](ScreenShot/LfSlider.gif) diff --git a/QSlider/ScreenShot/LfSlider.gif b/QSlider/ScreenShot/LfSlider.gif new file mode 100644 index 0000000..035f311 Binary files /dev/null and b/QSlider/ScreenShot/LfSlider.gif differ diff --git a/README.md b/README.md index 8737cee..6405705 100644 --- a/README.md +++ b/README.md @@ -100,6 +100,7 @@ https://pyqt.site 论坛是专门针对PyQt5学习和提升开设的网站,分 - [QSlider](QSlider) - [滑动条点击定位](QSlider/ClickJumpSlider.py) - [双层圆环样式](QSlider/QssQSlider.py) + - [低频率值变化](QSlider/LfSlider.py) - Display Widgets - [QLabel](QLabel)