Не работает таймер в QLable
Я хочу сделать таймер в своей программе, написал логику работу, а вот с выводом в lable возникли проблемы. Если запустить программу, то в cmd будет выводится время, а интерфейс не загрузится. Как это решить?
main.py
# -*- coding: utf-8 -*-
from PyQt5 import QtCore, QtGui, QtWidgets
from oge import Ui_MainWindow
from PyQt5.Qt import *
from datetime import datetime, timedelta
import time
import rsa
import base64
import os
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Automatic OGE verification system ver.00.09.56")
(self.key_pub, self.key_priv) = rsa.newkeys(512)
self.pushButton.clicked.connect(self.information)
self.time()
def time(self):
beg = datetime.strptime(str('01:59:59'), '%H:%M:%S')
end = datetime.strptime(str('00:00:00'), '%H:%M:%S')
step = timedelta(seconds=1)
while beg != end:
beg = beg - step
print(str(beg).split()[1])
self.lable_55.setText(str(beg).split()[1])
time.sleep(1)
def information(self):
self.dd_mm_yy = self.lineEdit_6.text()
self.region = self.lineEdit_7.text()
self.code_eo = self.lineEdit_8.text()
self.number_class = self.lineEdit_9.text()
self.letter_class = self.lineEdit_13.text()
self.code_location_event = self.lineEdit_14.text()
self.number_auditorium = self.lineEdit_15.text()
self.number_option = self.lineEdit_16.text()
self.code_subject = self.lineEdit_17.text()
self.item_name = self.lineEdit_18.text()
self.number_kim = self.lineEdit_19.text()
self.surname = self.lineEdit.text()
self.name = self.lineEdit_2.text()
self.patronymic = self.lineEdit_3.text()
self.ser_passport = self.lineEdit_5.text()
self.number_passport = self.lineEdit_4.text()
sequences = (
self.dd_mm_yy, self.region, self.code_eo, self.number_class, self.letter_class, self.code_location_event,
self.number_auditorium, self.number_option, self.code_subject, self.item_name, self.number_kim,
self.surname, self.name, self.patronymic, self.ser_passport, self.number_passport
)
if all(len(x) > 0 for x in sequences):
if not os.path.exists('key_pub.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! В директории программы не обнаружен файл: "key_pub.pem"'
'Обратитесь к техническому специалисту')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_pub.pem', "rb") as f:
_key_pub = f.read()
key_pub = self.key_pub.load_pkcs1(_key_pub)
self.key_task(key_pub)
else:
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Обязательные поля данных не заполненны.'
'Заполните их для завершения работы.'
'Обратитесь к техническому специалисту')
msg.setWindowTitle("Ошибка")
msg.exec_()
def key_task(self, key_pub):
self.number_1 = self.lineEdit_20.text()
self.number_2 = self.lineEdit_22.text()
self.number_3 = self.lineEdit_21.text()
self.number_4 = self.lineEdit_23.text()
self.number_5 = self.lineEdit_24.text()
self.number_6 = self.lineEdit_25.text()
self.number_7 = self.lineEdit_26.text()
self.number_8 = self.lineEdit_27.text()
self.number_9 = self.lineEdit_28.text()
self.number_10 = self.lineEdit_29.text()
self.number_11 = self.lineEdit_30.text()
self.number_12 = self.lineEdit_31.text()
self.key_task_crypto(key_pub)
def key_task_crypto(self, key_pub):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), key_pub)
self.dd_mm_yy_crypto = rsa.encrypt(self.dd_mm_yy.encode('utf8'), key_pub)
self.region_crypto = rsa.encrypt(self.region.encode('utf8'), key_pub)
self.code_eo_crypto = rsa.encrypt(self.code_eo.encode('utf8'), key_pub)
self.number_class_crypto = rsa.encrypt(self.number_class.encode('utf8'), key_pub)
self.letter_class_crypto = rsa.encrypt(self.letter_class.encode('utf8'), key_pub)
self.code_location_event_crypto = rsa.encrypt(self.code_location_event.encode('utf8'), key_pub)
self.number_auditorium_crypto = rsa.encrypt(self.number_auditorium.encode('utf8'), key_pub)
self.number_option_crypto = rsa.encrypt(self.number_option.encode('utf8'), key_pub)
self.code_subject_crypto = rsa.encrypt(self.code_subject.encode('utf8'), key_pub)
self.item_name_crypto = rsa.encrypt(self.item_name.encode('utf8'), key_pub)
self.number_kim_crypto = rsa.encrypt(self.number_kim.encode('utf8'), key_pub)
self.surname_crypto = rsa.encrypt(self.surname.encode('utf8'), key_pub)
self.name_crypto = rsa.encrypt(self.name.encode('utf8'), key_pub)
self.patronymic_crypto = rsa.encrypt(self.patronymic.encode('utf8'), key_pub)
self.ser_passport_crypto = rsa.encrypt(self.ser_passport.encode('utf8'), key_pub)
self.number_passport_crypto = rsa.encrypt(self.number_passport.encode('utf8'), key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto, self.number_5_crypto,
self.number_6_crypto, self.number_7_crypto, self.number_8_crypto, self.number_9_crypto, self.number_10_crypto,
self.number_11_crypto, self.number_12_crypto, self.dd_mm_yy_crypto, self.region_crypto, self.code_eo_crypto,
self.number_class_crypto, self.letter_class_crypto, self.code_location_event_crypto, self.number_auditorium_crypto,
self.number_option_crypto, self.code_subject_crypto, self.item_name_crypto, self.number_kim_crypto, self.surname_crypto,
self.name_crypto, self.patronymic_crypto, self.ser_passport_crypto, self.number_passport_crypto]
directory_save_key = "G:\PyCharm\PyCharmProject\projectSAFTD_x32\OGE/TEST.txt"
with open(directory_save_key, "w") as f:
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Ответы на задание ОГЭ сохранены в БД программы. '
'Сообщите администратору о готовности покинуть аудиторию.')
msg.setWindowTitle("Информация")
msg.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_())
Интерфейс: https://drive.google.com/file/d/1mXfYQKxhX2k2wxNmUs896TTDOn1q5foM/view?usp=sharing
Ответы (1 шт):
Автор решения: S. Nick
→ Ссылка
Нельзя использовать time.sleep() - это замораживает интерфейс.
Класс QTimer предоставляет повторяющиеся и однократные таймеры.
main.py
from PyQt5 import QtCore, QtGui, QtWidgets
from oge import Ui_MainWindow
from PyQt5.Qt import *
from datetime import datetime, timedelta
import time
import rsa
import base64
import os
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self):
super().__init__()
self.setupUi(self)
self.setWindowTitle("Automatic OGE verification system ver.00.09.56")
(self.key_pub, self.key_priv) = rsa.newkeys(512)
self.pushButton.clicked.connect(self.information)
# +++ vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
# self.time()
self.beg = datetime.strptime(str('01:59:59'), '%H:%M:%S')
# self.end = datetime.strptime(str('00:00:00'), '%H:%M:%S')
self.end = datetime.strptime(str('01:59:49'), '%H:%M:%S') # только для теста
self.step = timedelta(seconds=1)
self.timer = QtCore.QTimer()
self.timer.setInterval(1000)
self.timer.timeout.connect(self._time)
self.timer.start()
self.lable_55.setStyleSheet('background-color: #34626C; color: #CFD3CE; font-size: 25px;')
def _time(self):
# beg = datetime.strptime(str('01:59:59'), '%H:%M:%S')
# end = datetime.strptime(str('00:00:00'), '%H:%M:%S')
# step = timedelta(seconds=1)
# while beg != end:
if self.beg != self.end:
self.beg = self.beg - self.step
# print(str(self.beg).split()[1])
self.lable_55.setText(str(self.beg).split()[1])
# time.sleep(1)
else:
self.timer.stop()
self.lable_55.setStyleSheet('background-color: #34626C; color: #f00; font-size: 25px;')
# +++ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
def information(self):
self.dd_mm_yy = self.lineEdit_6.text()
self.region = self.lineEdit_7.text()
self.code_eo = self.lineEdit_8.text()
self.number_class = self.lineEdit_9.text()
self.letter_class = self.lineEdit_13.text()
self.code_location_event = self.lineEdit_14.text()
self.number_auditorium = self.lineEdit_15.text()
self.number_option = self.lineEdit_16.text()
self.code_subject = self.lineEdit_17.text()
self.item_name = self.lineEdit_18.text()
self.number_kim = self.lineEdit_19.text()
self.surname = self.lineEdit.text()
self.name = self.lineEdit_2.text()
self.patronymic = self.lineEdit_3.text()
self.ser_passport = self.lineEdit_5.text()
self.number_passport = self.lineEdit_4.text()
sequences = (
self.dd_mm_yy, self.region, self.code_eo, self.number_class, self.letter_class, self.code_location_event,
self.number_auditorium, self.number_option, self.code_subject, self.item_name, self.number_kim,
self.surname, self.name, self.patronymic, self.ser_passport, self.number_passport
)
if all(len(x) > 0 for x in sequences):
if not os.path.exists('key_pub.pem'):
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! В директории программы не обнаружен файл: "key_pub.pem"'
'Обратитесь к техническому специалисту')
msg.setWindowTitle("Ошибка")
msg.exec_()
return
with open('key_pub.pem', "rb") as f:
_key_pub = f.read()
key_pub = self.key_pub.load_pkcs1(_key_pub)
self.key_task(key_pub)
else:
msg = QMessageBox()
msg.setIcon(QMessageBox.Warning)
msg.setText("Ошибка")
msg.setInformativeText('ВНИМАНИЕ! Обязательные поля данных не заполненны.'
'Заполните их для завершения работы.'
'Обратитесь к техническому специалисту')
msg.setWindowTitle("Ошибка")
msg.exec_()
def key_task(self, key_pub):
self.number_1 = self.lineEdit_20.text()
self.number_2 = self.lineEdit_22.text()
self.number_3 = self.lineEdit_21.text()
self.number_4 = self.lineEdit_23.text()
self.number_5 = self.lineEdit_24.text()
self.number_6 = self.lineEdit_25.text()
self.number_7 = self.lineEdit_26.text()
self.number_8 = self.lineEdit_27.text()
self.number_9 = self.lineEdit_28.text()
self.number_10 = self.lineEdit_29.text()
self.number_11 = self.lineEdit_30.text()
self.number_12 = self.lineEdit_31.text()
self.key_task_crypto(key_pub)
def key_task_crypto(self, key_pub):
self.number_1_crypto = rsa.encrypt(self.number_1.encode('utf8'), key_pub)
self.number_2_crypto = rsa.encrypt(self.number_2.encode('utf8'), key_pub)
self.number_3_crypto = rsa.encrypt(self.number_3.encode('utf8'), key_pub)
self.number_4_crypto = rsa.encrypt(self.number_4.encode('utf8'), key_pub)
self.number_5_crypto = rsa.encrypt(self.number_5.encode('utf8'), key_pub)
self.number_6_crypto = rsa.encrypt(self.number_6.encode('utf8'), key_pub)
self.number_7_crypto = rsa.encrypt(self.number_7.encode('utf8'), key_pub)
self.number_8_crypto = rsa.encrypt(self.number_8.encode('utf8'), key_pub)
self.number_9_crypto = rsa.encrypt(self.number_9.encode('utf8'), key_pub)
self.number_10_crypto = rsa.encrypt(self.number_10.encode('utf8'), key_pub)
self.number_11_crypto = rsa.encrypt(self.number_11.encode('utf8'), key_pub)
self.number_12_crypto = rsa.encrypt(self.number_12.encode('utf8'), key_pub)
self.dd_mm_yy_crypto = rsa.encrypt(self.dd_mm_yy.encode('utf8'), key_pub)
self.region_crypto = rsa.encrypt(self.region.encode('utf8'), key_pub)
self.code_eo_crypto = rsa.encrypt(self.code_eo.encode('utf8'), key_pub)
self.number_class_crypto = rsa.encrypt(self.number_class.encode('utf8'), key_pub)
self.letter_class_crypto = rsa.encrypt(self.letter_class.encode('utf8'), key_pub)
self.code_location_event_crypto = rsa.encrypt(self.code_location_event.encode('utf8'), key_pub)
self.number_auditorium_crypto = rsa.encrypt(self.number_auditorium.encode('utf8'), key_pub)
self.number_option_crypto = rsa.encrypt(self.number_option.encode('utf8'), key_pub)
self.code_subject_crypto = rsa.encrypt(self.code_subject.encode('utf8'), key_pub)
self.item_name_crypto = rsa.encrypt(self.item_name.encode('utf8'), key_pub)
self.number_kim_crypto = rsa.encrypt(self.number_kim.encode('utf8'), key_pub)
self.surname_crypto = rsa.encrypt(self.surname.encode('utf8'), key_pub)
self.name_crypto = rsa.encrypt(self.name.encode('utf8'), key_pub)
self.patronymic_crypto = rsa.encrypt(self.patronymic.encode('utf8'), key_pub)
self.ser_passport_crypto = rsa.encrypt(self.ser_passport.encode('utf8'), key_pub)
self.number_passport_crypto = rsa.encrypt(self.number_passport.encode('utf8'), key_pub)
self.load_key_task_crypto()
def load_key_task_crypto(self):
k = [self.number_1_crypto, self.number_2_crypto, self.number_3_crypto, self.number_4_crypto, self.number_5_crypto,
self.number_6_crypto, self.number_7_crypto, self.number_8_crypto, self.number_9_crypto, self.number_10_crypto,
self.number_11_crypto, self.number_12_crypto, self.dd_mm_yy_crypto, self.region_crypto, self.code_eo_crypto,
self.number_class_crypto, self.letter_class_crypto, self.code_location_event_crypto, self.number_auditorium_crypto,
self.number_option_crypto, self.code_subject_crypto, self.item_name_crypto, self.number_kim_crypto, self.surname_crypto,
self.name_crypto, self.patronymic_crypto, self.ser_passport_crypto, self.number_passport_crypto]
directory_save_key = "G:\PyCharm\PyCharmProject\projectSAFTD_x32\OGE/TEST.txt"
with open(directory_save_key, "w") as f:
f.write("\n".join(base64.b64encode(item).decode('utf8') for item in k))
msg = QMessageBox()
msg.setIcon(QMessageBox.Information)
msg.setText("Информация")
msg.setInformativeText('Ответы на задание ОГЭ сохранены в БД программы. '
'Сообщите администратору о готовности покинуть аудиторию.')
msg.setWindowTitle("Информация")
msg.exec_()
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
app.setStyle("Fusion")
w = MainWindow()
w.show()
sys.exit(app.exec_())
