我尝试通过逐个添加字母来创建显示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_())
这段代码显然不起作用 - 但我不知道如何做到这一点"简单"的事情。
答案 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_())