Skip to content

Commit 991d660

Browse files
committed
add pyqt5 marquee
1 parent dcbfd61 commit 991d660

File tree

2 files changed

+66
-0
lines changed

2 files changed

+66
-0
lines changed

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,3 +29,5 @@
2929
* p17_画饼图 [源码下载](p17_qtpychart) [博文地址](https://xugaoxiang.com/2021/08/04/pyqt5-17-pyqtchart/)
3030

3131
* p18_打开网页 [源码下载](p18_打开网页) [博文地址](https://xugaoxiang.com/2021/08/05/pyqt5-18-pyqtwebengine/)
32+
33+
* p19_跑马灯 [源码下载](p19_跑马灯) [博文地址](https://xugaoxiang.com/2021/10/08/pyqt5-19-marquee/)

p19_跑马灯/main.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
import sys
2+
from PyQt5.QtCore import QTimeLine
3+
from PyQt5.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QHBoxLayout, QVBoxLayout
4+
5+
6+
class Marquee(QWidget):
7+
def __init__(self):
8+
super(Marquee, self).__init__()
9+
self.setWindowTitle("PyQt5跑马灯示例")
10+
self.resize(600, 600)
11+
12+
self.label = QLabel(
13+
'你好,我是一个跑马灯!欢迎访问我的网站:https://xugaoxiang.com ', self)
14+
15+
# label开始的位置,label在纵坐标为280的水平线上滚动
16+
self.label.move(-100, 280)
17+
18+
# 10000是持续时间,单位是毫秒
19+
self.timeline = QTimeLine(10000, self)
20+
21+
# 设置帧范围,越大,变化的越快
22+
self.timeline.setFrameRange(0, 500)
23+
24+
# 绑定frameChanged信号到槽函数slot_frame_changed
25+
self.timeline.frameChanged.connect(self.slot_frame_changed)
26+
27+
# 设置循环次数,0表示无限次
28+
self.timeline.setLoopCount(0)
29+
30+
# 开始timeline,QTimeLine有3种状态,NotRunning、Running和Paused,其状态切换涉及到的方法有start、stop、resume、setPaused,状态变化后,会发出信号stateChanged
31+
self.timeline.start()
32+
33+
# 创建2个按钮,分别用来控制从左到右和从右向左
34+
self.forward_btn = QPushButton('从左到右', self)
35+
self.backward_btn = QPushButton('从右到左', self)
36+
37+
# 设置2个按钮的位置
38+
self.forward_btn.move(150, 100)
39+
self.backward_btn.move(350, 100)
40+
41+
# 处理2个按钮的点击
42+
self.forward_btn.clicked.connect(
43+
lambda: self.slot_direction_changed(self.forward_btn))
44+
self.backward_btn.clicked.connect(
45+
lambda: self.slot_direction_changed(self.backward_btn))
46+
47+
def slot_frame_changed(self, frame):
48+
# 这里的frame就是setFrameRange设定的范围
49+
self.label.move(-100 + frame, 280)
50+
51+
def slot_direction_changed(self, btn):
52+
if btn == self.forward_btn:
53+
# 设置时间轴动画,从左到右,这是默认的
54+
self.timeline.setDirection(QTimeLine.Forward)
55+
else:
56+
# 设置时间轴动画,从右到左
57+
self.timeline.setDirection(QTimeLine.Backward)
58+
59+
60+
if __name__ == '__main__':
61+
app = QApplication(sys.argv)
62+
Marquee = Marquee()
63+
Marquee.show()
64+
sys.exit(app.exec_())

0 commit comments

Comments
 (0)