Skip to content

Commit 2a54e67

Browse files
committed
LfSlider
1 parent 1f0491f commit 2a54e67

File tree

4 files changed

+92
-1
lines changed

4 files changed

+92
-1
lines changed

Diff for: QSlider/LfSlider.py

+82
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
#!/usr/bin/env python
2+
# -*- coding: utf-8 -*-
3+
4+
"""
5+
Created on 2021/4/9
6+
@author: Irony
7+
@site: https://github.com/PyQt5
8+
9+
@file: LfSlider
10+
@description: 降低值变化频率
11+
"""
12+
from datetime import datetime
13+
14+
from PyQt5.QtCore import pyqtSignal, QTimer, Qt
15+
from PyQt5.QtWidgets import QSlider, QWidget, QVBoxLayout, QPlainTextEdit, QHBoxLayout, QGroupBox
16+
17+
18+
class LfSlider(QSlider):
19+
valueChanged = pyqtSignal(int)
20+
21+
def __init__(self, *args, **kwargs):
22+
delay = kwargs.pop('delay', 500)
23+
super(LfSlider, self).__init__(*args, **kwargs)
24+
self.lastValue = self.value()
25+
self.uTimer = QTimer(self)
26+
self.uTimer.timeout.connect(self.onValueChanged)
27+
self.uTimer.start(delay)
28+
29+
def onValueChanged(self):
30+
if self.lastValue != self.value():
31+
self.lastValue = self.value()
32+
self.valueChanged.emit(self.lastValue)
33+
34+
35+
class TestWindow(QWidget):
36+
37+
def __init__(self, *args, **kwargs):
38+
super(TestWindow, self).__init__(*args, **kwargs)
39+
layout = QHBoxLayout(self)
40+
41+
# 左侧原始
42+
left_group = QGroupBox('原始QSlider', self)
43+
left_layout = QVBoxLayout(left_group)
44+
self.leftLabel = QPlainTextEdit(self)
45+
left_layout.addWidget(self.leftLabel)
46+
47+
self.leftSlider = QSlider(Qt.Horizontal, self)
48+
self.leftSlider.valueChanged.connect(self.onLeftChanged)
49+
left_layout.addWidget(self.leftSlider)
50+
51+
layout.addWidget(left_group)
52+
53+
# 右侧低频率变化
54+
right_group = QGroupBox('LfSlider', self)
55+
right_layout = QVBoxLayout(right_group)
56+
self.rightLabel = QPlainTextEdit(self)
57+
right_layout.addWidget(self.rightLabel)
58+
59+
self.rightSlider = LfSlider(Qt.Horizontal, self)
60+
self.rightSlider.valueChanged.connect(self.onRightChanged)
61+
right_layout.addWidget(self.rightSlider)
62+
63+
layout.addWidget(right_group)
64+
65+
def onLeftChanged(self, value):
66+
self.leftLabel.appendPlainText(datetime.now().strftime("[%H:%M:%S.%f] ") + str(value))
67+
68+
def onRightChanged(self, value):
69+
self.rightLabel.appendPlainText(datetime.now().strftime("[%H:%M:%S.%f] ") + str(value))
70+
71+
72+
if __name__ == '__main__':
73+
import sys
74+
import cgitb
75+
76+
cgitb.enable(format='text')
77+
from PyQt5.QtWidgets import QApplication
78+
79+
app = QApplication(sys.argv)
80+
w = TestWindow()
81+
w.show()
82+
sys.exit(app.exec_())

Diff for: QSlider/README.md

+9-1
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
- 目录
44
- [滑动条点击定位](#1滑动条点击定位)
55
- [双层圆环样式](#2双层圆环样式)
6+
- [低频率值变化](#3低频率值变化)
67

78
## 1、滑动条点击定位
89
[运行 ClickJumpSlider.py](ClickJumpSlider.py)
@@ -43,4 +44,11 @@ def mousePressEvent(self, event):
4344
[运行 QssQSlider.py](QssQSlider.py) | [运行 PaintQSlider.py](PaintQSlider.py)
4445

4546
![QssQSlider](ScreenShot/QssQSlider.gif)
46-
![PaintQSlider](ScreenShot/PaintQSlider.gif)
47+
![PaintQSlider](ScreenShot/PaintQSlider.gif)
48+
49+
## 3、低频率值变化
50+
[运行 LfSlider.py](LfSlider.py)
51+
52+
覆盖了`valueChanged`信号,通过使用定时器来延迟发送值变化,如果无法覆盖信号则可以自定义一个新的信号
53+
54+
![LfSlider](ScreenShot/LfSlider.gif)

Diff for: QSlider/ScreenShot/LfSlider.gif

483 KB
Loading

Diff for: README.md

+1
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,7 @@ https://pyqt.site 论坛是专门针对PyQt5学习和提升开设的网站,分
100100
- [QSlider](QSlider)
101101
- [滑动条点击定位](QSlider/ClickJumpSlider.py)
102102
- [双层圆环样式](QSlider/QssQSlider.py)
103+
- [低频率值变化](QSlider/LfSlider.py)
103104

104105
- Display Widgets
105106
- [QLabel](QLabel)

0 commit comments

Comments
 (0)