ОБСУЖДЕНИЕ Статья 

[Python] - #4 Управление основным циклом приложения на PyQt5

0 ответов 3,9 тыс.
Автор темы

Начало​

Для взаимодействия с системой и обработки возникающих сигналов предназначен основной цикл приложения. После вызова 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 секунд, т.е все событии будет отклонены:
Снимок экрана от 2021-06-12 10-53-10.png


Когда вы запустите данную программу и нажмете на кнопку Запустить процесс, то цикл прерывается на 10 секунд, если вы попытаетесь закрыть данное окно, то у вас не получится, так как цикл приостановился на 10 секунд.

Операцию, так же можно разбить на несколько этапов и по завершении каждого этапа выходить в основной цикл с помощью processEvents из класса QApplication. Мы будем делать это уже следующим статье. В следующим статье, я покажу как можно Запустить процесс и Остановить, мы будем говорить о потоках, многопоточность.

Итоги​

Мы научились как приостановливать данное окно(цикл), и при запуски все событии будут просто отключены. Надеюсь, статья помогла вам. [БУДУ РАД ЕСЛИ НАЙДЕТЕ ОШИБКИ В ТЕКСТЕ ИЛИ В КОДЕ.]​
 
Последнее редактирование модератором:
  • Нравится
Реакции: Сатана
1