我正在尝试让feedparser中的文本从右到左滚动屏幕.我正在使用PyQt5,我不知道如何添加此功能.

我想要显示的是下面

import feedparser

sports = feedparser.parse('http://rssfeeds.usatoday.com/UsatodaycomSports-TopStories')

for e in sports['entries']:

news = (e.get('title', ''))

我正在寻找连续滚动,直到所有新闻标题都被阅读,然后页面被重新加载以获取最新的头条新闻或者只​​是重读已经存在的新闻.谢谢!

解决方法:

您可以使用QTimeLine在标签中显示连续滚动的新闻切片.如果在QTimeLine运行时应用程序中的其他功能被阻止,我会在一个小的gui中实现它来尝试:

import feedparser

import sys

from PyQt5 import QtWidgets, QtCore

class MyWidget(QtWidgets.QWidget):

def __init__(self, parent = None):

QtWidgets.QWidget.__init__(self, parent)

self.setGeometry(200, 200, 800, 600)

self.textLabel = QtWidgets.QLabel('') # label showing some text

self.uButton = QtWidgets.QPushButton('upper Button')

self.lButton = QtWidgets.QPushButton('lower Button')

self.label = QtWidgets.QLabel('') # label showing the news

self.label.setAlignment(QtCore.Qt.AlignRight) # text starts on the right

self.layout = QtWidgets.QVBoxLayout()

self.layout.addWidget(self.textLabel)

self.layout.addWidget(self.uButton)

self.layout.addWidget(self.lButton)

self.layout.addWidget(self.label)

self.layout.setStretch(0, 3)

self.layout.setStretch(1, 3)

self.layout.setStretch(2, 3)

self.layout.setStretch(3, 1)

self.setLayout(self.layout)

self.timeLine = QtCore.QTimeLine()

self.timeLine.setCurveShape(QtCore.QTimeLine.LinearCurve) # linear Timeline

self.timeLine.frameChanged.connect(self.setText)

self.timeLine.finished.connect(self.nextNews)

self.signalMapper = QtCore.QSignalMapper(self)

self.signalMapper.mapped[str].connect(self.setTlText)

self.uButton.clicked.connect(self.signalMapper.map)

self.signalMapper.setMapping(self.uButton, self.uButton.text())

self.lButton.clicked.connect(self.signalMapper.map)

self.signalMapper.setMapping(self.lButton, self.lButton.text())

self.feed()

def feed(self):

fm = self.label.fontMetrics()

self.nl = int(self.label.width()/fm.averageCharWidth()) # shown stringlength

news = []

sports = feedparser.parse('http://rssfeeds.usatoday.com/UsatodaycomSports-TopStories')

for e in sports['entries']:

news.append(e.get('title', ''))

appendix = ' '*self.nl # add some spaces at the end

news.append(appendix)

delimiter = ' +++ ' # shown between the messages

self.news = delimiter.join(news)

newsLength = len(self.news) # number of letters in news = frameRange

lps = 4 # letters per second

dur = newsLength*1000/lps # duration until the whole string is shown in milliseconds

self.timeLine.setDuration(dur)

self.timeLine.setFrameRange(0, newsLength)

self.timeLine.start()

def setText(self, number_of_frame):

if number_of_frame < self.nl:

start = 0

else:

start = number_of_frame - self.nl

text = '{}'.format(self.news[start:number_of_frame])

self.label.setText(text)

def nextNews(self):

self.feed() # start again

def setTlText(self, text):

string = '{} pressed'.format(text)

self.textLabel.setText(string)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

widget = MyWidget()

widget.show()

sys.exit(app.exec_())

添加PySide2版本:

import feedparser

import sys

from PySide2 import QtWidgets, QtCore

class MyWidget(QtWidgets.QWidget):

def __init__(self, parent = None):

QtWidgets.QWidget.__init__(self, parent)

self.setGeometry(200, 200, 800, 600)

self.textLabel = QtWidgets.QLabel('') # label showing some text

self.uButton = QtWidgets.QPushButton('upper Button')

self.lButton = QtWidgets.QPushButton('lower Button')

self.label = QtWidgets.QLabel('') # label showing the news

self.label.setAlignment(QtCore.Qt.AlignRight) # text starts on the right

self.layout = QtWidgets.QVBoxLayout()

self.layout.addWidget(self.textLabel)

self.layout.addWidget(self.uButton)

self.layout.addWidget(self.lButton)

self.layout.addWidget(self.label)

self.layout.setStretch(0, 3)

self.layout.setStretch(1, 3)

self.layout.setStretch(2, 3)

self.layout.setStretch(3, 1)

self.setLayout(self.layout)

self.timeLine = QtCore.QTimeLine()

self.timeLine.setCurveShape(QtCore.QTimeLine.LinearCurve) # linear Timeline

self.timeLine.frameChanged.connect(self.setText)

self.timeLine.finished.connect(self.nextNews)

self.signalMapper = QtCore.QSignalMapper(self)

self.signalMapper.mapped[str].connect(self.setTlText)

self.uButton.clicked.connect(self.signalMapper.map)

self.signalMapper.setMapping(self.uButton, self.uButton.text())

self.lButton.clicked.connect(self.signalMapper.map)

self.signalMapper.setMapping(self.lButton, self.lButton.text())

self.feed()

def feed(self):

fm = self.label.fontMetrics()

self.nl = int(self.label.width()/fm.averageCharWidth()) # shown stringlength

news = []

sports = feedparser.parse('http://rssfeeds.usatoday.com/UsatodaycomSports-TopStories')

for e in sports['entries']:

news.append(e.get('title', ''))

appendix = ' '*self.nl # add some spaces at the end

news.append(appendix)

delimiter = ' +++ ' # shown between the messages

self.news = delimiter.join(news)

newsLength = len(self.news) # number of letters in news = frameRange

lps = 4 # letters per second

dur = newsLength*1000/lps # duration until the whole string is shown in milliseconds

self.timeLine.setDuration(dur)

self.timeLine.setFrameRange(0, newsLength)

self.timeLine.start()

def setText(self, number_of_frame):

if number_of_frame < self.nl:

start = 0

else:

start = number_of_frame - self.nl

text = '{}'.format(self.news[start:number_of_frame])

self.label.setText(text)

def nextNews(self):

self.feed() # start again

def setTlText(self, text):

string = '{} pressed'.format(text)

self.textLabel.setText(string)

if __name__ == '__main__':

app = QtWidgets.QApplication(sys.argv)

widget = MyWidget()

widget.show()

sys.exit(app.exec_())

标签:python,label,pyqt

来源: https://codeday.me/bug/20191003/1848065.html

python 滚动字幕_python – 在PyQt中滚动文本?相关推荐

  1. Python使用pdfminer3k提取PDF文件中的文本

    推荐教材: <Python程序设计(第3版)>,(ISBN:978-7-302-55083-9),董付国,清华大学出版社,2020年6月第1次印刷,2021年12月第11次印刷,山东省一流 ...

  2. html语音中添加滚动字幕,如何给视频添加滚动字幕

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. 以爱剪辑为例,给视频添加滚动字幕的方法如下: 1.打开爱剪辑视频编辑软件. 2.打开后双击下面的白色方框添加要制作的视频. 3.点 ...

  3. html 滚动字幕如何设置,如何制作滚动字幕 视频画面加滚动字幕,自己设置滚动字幕的显示时间(滚动次数)...

    不管是电影还是电视中都经常会出现一些滚动字幕,滚动字幕的内容可以是广告.通知.说明.或者是总结等.视频中的滚动字幕除了起到宣传或提示的作用,更重要的是丰富了视频的层次,让画面更加精美.但有时候我们自己 ...

  4. html+监听+页面滚动到底部,解决HTML5中滚动到底部的事件问题

    问题:在H5中,我们有这样的需求:例如有列表的时候,滚动到底部时,需要加载更多. 解决方案:可以采用window的滚动事件进行处理 分析:如果滚动是针对整个屏幕而言的(不针对于某个界面小块),那么这个 ...

  5. android 屏幕滚动字幕,LED灯牌显示屏滚动字幕

    LED灯牌显示屏滚动字幕app是一款手机led灯牌工具,直接将手机作为led等,打造喜欢的led滚动效果:在看演唱会的时候,拿起手机就能当led显示灯,完全不用特地准备,还方便携带:并且在制作led灯 ...

  6. html 滚动字幕如何设置,Html 文字滚动

    滚动字幕会让很多人感到兴奋,特别是第一次使用滚动字幕时,会爱不释手.现在做一个详细的方案,让你更全面地了解一下. 滚动字幕在FrontPage的组件里有,但是FrontPage这个软件只能支持单行文字 ...

  7. html滚动字幕图片,网页HTML代码滚动文字制作

    讲述HTML代码中比较特殊的标签,它能使网页中的文字滚动,并且可以控制其滚动的属性.以下是小编整理的网页HTML代码滚动文字制作,欢迎来阅读! 制作滚动文字 通过本章前面的学习,读者已经能够很好地控制 ...

  8. python字符串转义序列_Python | 忽略字符串中的转义序列

    python字符串转义序列 First see, how escape sequence works? 首先看,转义序列如何工作? In the below example, we are using ...

  9. python字符串添加元素_python向字符串中添加元素的实例方法

    Python中的字符串对象是不能更改的,也即直接修改字符串中的某一位或几位字符是实现不了的,即python中字符串对象不可更改,但字符串对象的引用可更改,可重新指向新的字符串对象. + 直接字符串外+ ...

  10. python 滚动字幕_Python pygame绘制文字制作滚动文字过程解析

    这篇文章主要介绍了Python pygame绘制文字制作滚动文字过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 字体常用的不是很多,在pyg ...

最新文章

  1. CNN被打败!Transformer将统帅人工智能?
  2. 深入了解Kubernetes CRD开发工具kubebuilder
  3. WebService到底是什?
  4. 英语中正式和休闲的打招呼_6
  5. kafka 的pom文件_Flink的sink实战之二:kafka
  6. android 渲染yuv数据,Android opengl渲染yuv420例子
  7. android开发中的grid控制
  8. 图像边缘检测新方向--量子算法
  9. ABB伺服驱动器调试(一)
  10. 乔布斯的创新故事_创新工作的真实故事
  11. week05-继承、多态、抽象类与接口
  12. 数据探查平台-元数据对标专利 -- 普帝
  13. 学习 ES 的笔记、全文检索、倒排索引、Lucene、ik中文分词器、Kibana使用Dev Tools
  14. MySQL:偏移量为 0x000000000ae000 的位置执行 读取 期间,操作系统已经向 SQL Server 返回了错误 21(设备未就绪。)。
  15. linux 多播路由查看,Linux下多播路由的实现Windows系统 -电脑资料
  16. 地平线开发者社区真心话大冒险,邀你闯关!
  17. 可以检测网页被篡改并发送告警通知的工具——WGCLOUD
  18. 根据当前字母获取下一位 java
  19. 微特技术钢丝绳探伤仪自动监测系统功能概述
  20. (PCB系列二)AD20添加元件3D库

热门文章

  1. Android Studio升级到3.0版本后布局不能预览解决方案
  2. 机器学习之加州房价预测(一)
  3. Bmob后端云的使用
  4. Oracle日期类型转long类型
  5. Lempel-Ziv算法
  6. 曾经是“杀手级”桌面语言,Java桌面开发为何走向衰落?
  7. android 合并分区说明,Android系统手机sd卡分区后合并图文详解
  8. 前端研发生态环境构建经验谈
  9. 调研:暴力恐怖犯罪识别(图像识别)
  10. Olly's Shadow