PyQt5 как сделать паузу?

import sys
from PyQt5.QtWidgets import *
from PyQt5 import QtCore, QtWidgets
from PyQt5.QtCore import QSize
import time
class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)
        self.btn1 = QPushButton("Кнопка 2", self)
        self.btn1.move(100, 200)
        self.btn1.clicked.connect(self.ss)
        self.btn2 = QPushButton("Кнопка 1", self)
        self.btn2.move(190, 200)
        self.btn2.clicked.connect(self.s)
        self.run = True
    def ss(self):
        self.run = False
        time.sleep(10)
    def s(self):
        for i in range(0,10):
            if self.run == False:
                print('123213')
            time.sleep(1)
            print(i)
 
if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication([])
    app.setStyle('Breeze')
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec())
    

Ответы (1 шт):

Автор решения: S. Nick

time.sleep - блокирует интерфейс. Как вариант рекомендую вам использовать класс QTimer. Больше https://doc.qt.io/qt-5/qtimer.html

from PyQt5.QtWidgets import QMainWindow, QWidget, QLabel, QPushButton, QGridLayout, QApplication
from PyQt5.QtCore import QSize, QTimer


class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        
        self.centralWidget = QWidget()                             
        self.setCentralWidget(self.centralWidget)                  

        self.label = QLabel()
        
        self.btn1 = QPushButton("Сделать паузу 5 сек.", self)
        self.btn1.clicked.connect(self.ss)
        
        self.btn2 = QPushButton("Запустить цикл", self)
        self.btn2.clicked.connect(self.s)
        
        self.run = True
        self.num = 1

        layout = QGridLayout(self.centralWidget)         
        layout.addWidget(self.label, 0, 0, 1, 2)
        layout.addWidget(self.btn2, 1, 0)
        layout.addWidget(self.btn1, 1, 1)
        
        self.timer = QTimer(self)
        self.timer.timeout.connect(self.showTime)
        
    def showTime(self):
        self.label.setNum(self.num)
        self.num += 1
        
    def ss(self):
        self.timer.stop()
        QTimer.singleShot(5000, self.s)                  #  5 сек.
        
    def s(self):
        self.timer.start(1000)
          
 
if __name__ == "__main__":
    import sys
    app = QApplication([])
#    app.setStyle('Breeze')
    mw = MainWindow()
    mw.show()
    sys.exit(app.exec_())

введите сюда описание изображения

→ Ссылка