【发布时间】:2020-01-22 08:12:26
【问题描述】:
请问如何在QTextEdit scoll中制作文字,达到动画效果。动画效果应该和视频中的一样:https://www.youtube.com/watch?v=MyeuGdXv4XM
使用 PyQt 我想得到这个效果: 文本应该以 2 行/秒的速度自动向下滚动,直到到达末尾并停止。
在我下面的代码中,当单击按钮时,文本显示在 QTextEdit-Widget 中。文本很长,因此显示了滚动条。
我的问题: 我不知道如何制作动画效果。因此,我想请您帮忙更正我的代码。
# -*- coding: utf-8 -*-
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *
import sys
import time
list_longText = [" long text 1 - auto scrolling " * 1000, " long text 2 - auto scrolling " * 2000]
class Worker(QObject):
finished = pyqtSignal()
strTxt = pyqtSignal(str)
def __init__(self, parent=None):
super(Worker, self).__init__(parent)
@pyqtSlot()
def onJob(self):
for i in range(2):
self.strTxt.emit(list_longText[i])
time.sleep(2)
class MyApp(QWidget):
def __init__(self):
super(MyApp, self).__init__()
self.setFixedSize(600, 400)
self.setObjectName("window")
self.initUI()
def initUI(self):
self.txt = QTextEdit("", self)
self.btn = QPushButton("Button", self)
self.btn.clicked.connect(self.start)
self.layout = QHBoxLayout(self)
self.layout.addWidget(self.txt)
self.layout.addWidget(self.btn)
self.setLayout(self.layout)
self.show()
def start(self):
self.thread = QThread()
self.obj = Worker()
self.obj.strTxt.connect(self.showText)
self.obj.moveToThread(self.thread)
self.obj.finished.connect(self.thread.quit)
self.thread.started.connect(self.obj.onJob)
self.thread.start()
def showText(self, str):
self.txt.setText("{}".format(str))
self.autoScroll()
def autoScroll(self):
vsb = self.txt.verticalScrollBar()
if vsb.value() <= vsb.maximum():
vsb.setValue(vsb.value() + 2)
time.sleep(1)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MyApp()
sys.exit(app.exec_())
非常感谢您的帮助!
【问题讨论】:
-
@eyllanesc 我粘贴视频只是为了表示。它显示文本已自动向上“移动”或“缩放”。在视频中,文本来自底部,但在我的情况下,文本可以从顶部开始。正如我所说,视频只是一个代表。我在上面编辑了我的问题,现在可以理解了吗?
-
@eyllanesc 单击按钮时,会加载文本,并开始自动滚动。一切都应该是自动的。只需单击一下,其余所有自动运行。
-
@eyllanesc 我不想下载视频。视频仅作展示,仅此而已。我只想让文本自动滚动。是你不懂我吗?
-
@eyllanesc 现在我明白你的意思了。我想在开头(单击按钮时)加载全文,但一点一点地显示文本。
-
@eyllanesc 是的,点击按钮时加载所有文本,然后自动开始自动滚动。
标签: python pyqt pyqt5 qtextedit