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_())
