Начало
Для взаимодействия с системой и обработки возникающих сигналов предназначен основной цикл приложения. После вызова exec_()
программа переходит в бесконечный цикл. Инструкции, расположенные после вызова этого метода, будут выполнены после завершение работы всего приложения.После возникновения любого сигнала основной цикл прерывается и управление передается в обработчик этого сигнала. После завершениу работы обработчика управление опять передается к основному циклу приложения. Если внутри обработчика выполняется операция то программа перестает работать на события т.е зависнет.
Пишем код
Напишем простой код, который сделает наше окно не рабочим на 10 секунд. Для этого предназначена библиотека time
, и ещё мы создадим функция on_clicked
, при нажатии на него, наше окно как я уже говорил, станет не рабочим:
Python:
from PyQt5 import QtWidgets
import sys, time # Импортируем sys и time
def on_clicked():
time.sleep(10) # Засыпаем на 10 секунд
app = QtWidgets.QApplication(sys.argv)
button - QtWigets.QPushButton("Запустить процесс") # Создаем простую кнопку
button.resize(200, 40) # Размер кнопки
button.clicked.connect(on_clicked) # При нажатии на кнопки, выполнится функция on_clicked
button.show()
sys.exit(exec_())
В этом примере при нажатии кнопки, вызывается функция
on_clicked()
, внутри который мы приостанавливаем выполнение программы на 10 секунд и тем самым прерываем основой цикл. Если запустить данную программу, то наше окно должен остановится на 10 секунд, т.е все событии будет отклонены:Когда вы запустите данную программу и нажмете на кнопку Запустить процесс, то цикл прерывается на 10 секунд, если вы попытаетесь закрыть данное окно, то у вас не получится, так как цикл приостановился на 10 секунд.
Операцию, так же можно разбить на несколько этапов и по завершении каждого этапа выходить в основной цикл с помощью
processEvents
из класса QApplication. Мы будем делать это уже следующим статье. В следующим статье, я покажу как можно Запустить процесс и Остановить, мы будем говорить о потоках, многопоточность.Итоги
Мы научились как приостановливать данное окно(цикл), и при запуски все событии будут просто отключены. Надеюсь, статья помогла вам. [БУДУ РАД ЕСЛИ НАЙДЕТЕ ОШИБКИ В ТЕКСТЕ ИЛИ В КОДЕ.]