66908


PyQt5で文字を1文字ずつ表示して文が完成するプログラミングをしたのですが、結果はちょっとほしいものではありません。

できている結果は、1文字ずつ表示されますが、表示された文字以外が表示されていません。

[![画像の説明をここに入力](https://i.stack.imgur.com/nlU4Z.gif)](https://i.stack.imgur.com/nlU4Z.gif)

でもほしいのは、このプログラムみたいな1文字ずつ現れながら文が完成するプログラムです。

[code]

    import time
    i = 0
    text = "Hello World"
    while i < len(text):
        time.sleep(1)
        print(text[i], end="")
        i += 1
    
[/code]

[![画像の説明をここに入力](https://i.stack.imgur.com/9lcP1.png)](https://i.stack.imgur.com/9lcP1.png)

現状のPyQt5のコードはこちらです。

[code]

    from PyQt5 import QtWidgets, QtCore
    
    class Main(QtWidgets.QMainWindow):
    
        def __init__(self):
        　　　　super().__init__()
        　　　　self.text = "Hello World"
        　　　　self.i = 0
        　　　　self.x = 0
    
        　　　　self.size = QtWidgets.QWidget.setGeometry(self, 50, 50, 600, 400)
    
        　　　　self.label = QtWidgets.QLabel(self)
    
        　　　　self.timer = QtCore.QTimer()
        　　　　self.timer.timeout.connect(self.printText)
        　　　　self.timer.start(2000)
    
        def printText(self):
    
        　　　　if self.i < len(self.text):
            　　　　self.label.setText(self.text[self.i])
            　　　　self.label.move(self.i + self.x, 20)
            　　　　self.label.show()
            　　　　self.i += 1
            　　　　self.x += 14
        　　　　else:
            　　　　self.timer.stop()
    
    if __name__ == '__main__':
        import sys
        app = QtWidgets.QApplication(sys.argv)
        window = Main()
        window.size
        window.show()
        sys.exit(app.exec_())
    
[/code]

何が足りないでしょうか？

教えてください、ありがとうございます。


CC BY-SA 4.0
2020-05-23T05:21:47.770
66906
2020-05-23T06:53:16.540
2020-05-23T06:38:47.827
3068
40291
question
python3 ubuntu pyqt5
PyQt5で文字を1文字ずつ表示したい


単一のQLabelを、内容を上書きしながら表示位置を移動するという動作になっています。  
それでは最新の1文字しか表示されず、以前の内容が残りません。  
移動はせずに表示する文字を増やしていく必要があります。

各文字の間隔を空けるのは、QFontのsetLetterSpacingで設定します。

以下のようになります。(変更した所に # でコメント、削除した所は特に記述せず)

[code]

    from PyQt5 import QtWidgets, QtCore
    from PyQt5.QtGui import *  # 文字間スペース設定用 import
    
    class Main(QtWidgets.QMainWindow):
    
        def __init__(self):
            super().__init__()
            self.text = "Hello World"
            self.outtext = ""  # 表示用変数用意
            self.i = 0
    
            self.size = QtWidgets.QWidget.setGeometry(self, 50, 50, 600, 400)
    
            self.label = QtWidgets.QLabel(self)
            self.label.move(0, 20)  # 表示始点設定
            font = self.label.font()  # ここ以下3行で文字間スペース設定
            font.setLetterSpacing(QFont.AbsoluteSpacing, 8)
            self.label.setFont(font)
    
            self.timer = QtCore.QTimer()
            self.timer.timeout.connect(self.printText)
            self.timer.start(2000)
    
        def printText(self):
    
            if self.i < len(self.text):
                self.outtext += self.text[self.i]  # 表示内容を1文字づつ追加
                self.label.setText(self.outtext)  # 表示内容設定
                self.label.adjustSize()  # 文字列に合わせてサイズ調整
                self.label.show()
                self.i += 1
            else:
                self.timer.stop()
    
    if __name__ == '__main__':
        import sys
        app = QtWidgets.QApplication(sys.argv)
        window = Main()
        window.size
        window.show()
        sys.exit(app.exec_())
    
[/code]


CC BY-SA 4.0
2020-05-23T06:53:16.540
66908
2020-05-23T06:53:16.540
26370
66906
answer