Зависает GUI при попытке запустить time.sleep() Python

Всем привет! Столкнулся с проблемой. Пытаюсь сделать свой будильник с интерфейсом. Самые основные функции он выполняет, но вот когда он уходит в сон ( чтобы через некоторое время зазвонить и уведомить) , интерфейс зависает и нажимать, печатать что-то я не могу. Использую библиотеку PySide, а интерфейс делал в Designer. Слышал я, про многопоточность и processEvents()Но я, пока что, не совсем понял что оно такое и если вам не трудно, показывайте примеры или решения на моём коде. Так будет легче, спасибо!

Вот код:

from PySide import QtCore, QtGui
import sys  #  UI Library
from ui import Ui_Form
from datetime import datetime
import datetime
import time
#
app = QtGui.QApplication(sys.argv)
#
Form = QtGui.QWidget()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
#
def bp():
   entrytime = ui.lineEdit.displayText()
   alarm_time = datetime.datetime.strptime(entrytime, '%H:%M')
   now = datetime.datetime.now()
   sleep_time = (alarm_time - now).seconds
   time.sleep(sleep_time) #Здесь проблема
   print("Будильник")
ui.pushButton.clicked.connect(bp)

sys.exit(app.exec_())

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

Автор решения: Юрыч BRO

Используя time.sleep() вы замораживаете основной поток, в котором и работает ваше приложение вместе с его графическим интерфейсом. Логично, что ничего не работает, если заморожен поток. Варианты:

  1. (Не советую) Использовать второй поток и запускать time.sleep и что-то там после этого делать. Например multiprocessing.Process. Документация: https://docs.python.org/3/library/multiprocessing.html
  2. Использовать средства библиотеки (QTimer.singleShot), в подробностях расписанные в этом вопросе: https://stackoverflow.com/a/18194335/4752653
→ Ссылка