如何自动在QTextEdit中滚动文本(动画效果?)>

问题描述 投票:2回答:1

我想问一下如何在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_())

非常感谢您的帮助!

我想问一下如何在QTextEdit scoll中制作文本,以达到动画效果。动画效果应类似于视频中显示的效果:https://www.youtube.com/watch?v = ...

python pyqt pyqt5 qtextedit
1个回答
2
投票

您想要的任务并不繁重,它是周期性的,因此使用线程是不合适的,对于此任务,我们可以使用QVariantAnimation

© www.soinside.com 2019 - 2024. All rights reserved.