Как при нажатии кнопки остановить вывод текста в Qlabel, а при повторном нажатии действие продолжалось?
Как при нажатии кнопки остановить вывод текста в Qlabel, а при повторном нажатии действие продолжалось?
import sys, time
from PyQt5.QtCore import Qt, QTimer, QEventLoop
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QMessageBox, QPushButton, QLabel, QInputDialog
from PyQt5 import QtGui
class Game(QWidget):
def __init__(self):
super().__init__()
self.timer = QTimer(self)
self.initUI()
def initUI(self):
self.play = True
self.btn_pause = QPushButton('||', self)
self.btn_pause.setGeometry(377, 3, 20, 20)
self.btn_pause.clicked.connect(self.pause)
self.text = f'После того, как запустите этот код, обратите внимание на то,\nчто ярлык возникает некорректно, так как\
размер — меньше,\nчем размер шрифта, который мы используем. Так что нам\nнужно установить размер ярлыка.'
self.lbl = QLabel(self)
self.lbl.setGeometry(20, 349, 460, 78)
self.timer = QTimer(self)
self.timer.timeout.connect(self.print_text)
self.timer.start(30)
self.new = [i for i in self.text]
self.len_new = len(self.new)
self.num = 0
self.resize(400, 500)
self.setWindowTitle('Квест')
def pause(self):
if self.btn_pause.text() == '||':
self.btn_pause.setText('>')
self.play = False
else:
self.btn_pause.setText('||')
self.play = True
def print_text(self):
if self.play:
self.lbl.setText(self.lbl.text() + self.new[self.num])
self.lbl.setFont(QtGui.QFont('SansSerif', 10))
self.num += 1
if self.num == self.len_new:
self.timer.stop()
return
else:
while not self.play:
continue
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Game()
ex.show()
sys.exit(app.exec_())
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Попробуйте нажимать кнопку и после того как весь текст отобразится.
import sys, time
from PyQt5.QtCore import Qt, QTimer, QEventLoop, pyqtSignal
from PyQt5.QtWidgets import QWidget, QDesktopWidget, QApplication, QMessageBox, \
QPushButton, QLabel, QInputDialog
from PyQt5 import QtGui
class Game(QWidget):
def __init__(self):
super().__init__()
self.timer = QTimer(self)
self.initUI()
def initUI(self):
self.play = True
self.btn_pause = QPushButton('||', self)
self.btn_pause.setGeometry(377, 3, 20, 20)
self.btn_pause.clicked.connect(self.pause)
self.text = f'После того, как запустите этот код, обратите внимание на то, \n'\
f'что ярлык возникает некорректно, так как '\
f'размер — меньше,\nчем размер шрифта, который мы используем. '\
f'Так что нам\nнужно установить размер ярлыка.'
self.lbl = QLabel(self)
self.lbl.setGeometry(20, 349, 460, 78)
self.timer = QTimer(self)
self.timer.timeout.connect(self.print_text)
self.timer.start(30)
self.new = [i for i in self.text]
self.len_new = len(self.new)
self.num = 0
self.resize(400, 500)
self.setWindowTitle('Квест')
def pause(self):
if self.btn_pause.text() == '||':
self.btn_pause.setText('>')
# self.play = False
self.timer.stop() # +++
else:
self.btn_pause.setText('||')
# self.play = True
self.timer.start(30) # +++
def print_text(self):
# if self.play:
if len(self.lbl.text()) == self.len_new: # +++
self.lbl.clear() # +++
self.lbl.setText(self.lbl.text() + self.new[self.num])
self.lbl.setFont(QtGui.QFont('SansSerif', 10))
self.num += 1
if self.num == self.len_new:
self.timer.stop()
# self.lbl.setText(self.lbl.text() + '\n')
self.num = 0 # +++
self.btn_pause.setText('>') # +++
# return
# else:
# while not self.play:
# continue
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Game()
ex.show()
sys.exit(app.exec_())
