PyQt:在QLabel中逐字添加文本

时间:2014-12-22 18:00:24

标签: python text pyqt4 qlineedit

我尝试通过逐个添加字母来创建显示QLabel(或QTextEdit)内容的应用程序(就像应用程序正在编写它们一样)。

这是python的一个例子:

import os, time

def write(text, time):
    base = ""
    for char in text:
        os.system("clear")
        base += char
        print base
        time.sleep(time)

def main():
    text = "this is a test"
    write(text, 0.05)

这是我的PyQt代码:

from PyQt4 import QtCore, QtGui
import sys

class Example(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)

        self.initUi()

        text = "this is a test"
        self.write(text, 50)

    def initUi(self):
        self.setGeometry(300, 300, 250, 150) 
        self.show()

        self.label = QtGui.QLabel(self)
        self.label.move(120, 60)

    def write(self, text, msec):
        base = ""
        for char in text:
            base += char
            self.label.setText(base)
            QtCore.QThread.msleep(msec)

if __name__ == "__main__":
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

这段代码显然不起作用 - 但我不知道如何做到这一点"简单"的事情。

1 个答案:

答案 0 :(得分:1)

您可以使用QTimer执行此操作:

import sys
from PyQt4 import QtCore, QtGui

class Example(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.label = QtGui.QLabel(self)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.label)
        self._text = 'this is a test'
        self._index = 0
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.handleTimer)
        self.timer.start(200)

    def handleTimer(self):
        self._index += 1
        self.label.setText(self._text[:self._index])
        if self._index > len(self._text):
            self.timer.stop()

if __name__ == '__main__':

    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.setGeometry(300, 300, 250, 150)
    ex.show()
    sys.exit(app.exec_())