我想问一下如何使文本在qtexted scoll中,达到动画效果。动画效果应该类似于视频中显示的效果:https://www.youtube.com/watch?v=MyeuGdXv4XM
有了PyQt,我想得到这样的效果: 文本应该以2行/秒的速度向下自动缩小,直到到达结尾并停止。在
在下面的代码中,当单击按钮时,文本将显示在QTextEdit小部件中。文本很长,因此显示滚动条。在
我的问题是: 我不知道如何制作动画效果。因此,我想请您帮忙更正我的代码。在
# -*- 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_())
非常感谢你的帮助!在
您想要的任务不重,它是周期性的,所以使用线程是不合适的,对于这个任务,我们可以使用
QVariantAnimation
。在另一部分是创建一个方法,它移动到文本的某一行,我们使用
QTextCursor
在QTextDocument
的findBlockByLineNumber()
旁边。在对于最后一个,我们必须开始移动到最后一个可见的初始值,我们使用
cursorForPosition()
方法,通过viewport()
的大小。在更新:
如果要连续移动,必须使用
^{pr2}$verticalScrollBar()
:相关问题 更多 >
编程相关推荐