• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

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

Muxtar

Green Team
02.06.2021
132
65
BIT
0

Начало

Для взаимодействия с системой и обработки возникающих сигналов предназначен основной цикл приложения. После вызова 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. Мы будем делать это уже следующим статье. В следующим статье, я покажу как можно Запустить процесс и Остановить, мы будем говорить о потоках, многопоточность.

Итоги

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!