Зависает 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 шт):
Используя time.sleep() вы замораживаете основной поток, в котором и работает ваше приложение вместе с его графическим интерфейсом. Логично, что ничего не работает, если заморожен поток.
Варианты:
- (Не советую) Использовать второй поток и запускать time.sleep и что-то там после этого делать. Например
multiprocessing.Process. Документация: https://docs.python.org/3/library/multiprocessing.html - Использовать средства библиотеки (
QTimer.singleShot), в подробностях расписанные в этом вопросе: https://stackoverflow.com/a/18194335/4752653