morse-light/gui.py

84 lines
2.9 KiB
Python

##########
# IMPORT #
##########
from sys import exit, argv
from PyQt5 import QtCore, QtWidgets, uic
from PyQt5.QtCore import QThreadPool
from PyQt5.QtWidgets import QMainWindow, QTextEdit, QPushButton, QLineEdit, QApplication, QMessageBox
try:
from controllers.controllerMorse import ControllerMorse
from components.config import ConfigMorse as config
erreur = False
except Exception as err:
erreur = err
# TODO lier la barre de status aux warnings et aux erreurs ne provoquant pas de crash => barreDeStatus
######################
# INITIALISATION DES #
# VARIABLES #
######################
__author__ = "rick@gnous.eu"
__licence__ = "GPL3 or later"
class InterfaceMorse(QMainWindow):
def __init__(self):
super(InterfaceMorse, self).__init__()
self.threadpool = QThreadPool()
if erreur:
self.creerErreur(str(erreur))
# initialisation de la fenetre
self.setWindowTitle("Texte vers morse")
self.ui = uic.loadUi('views/interface.ui')
self.setFixedWidth(719)
self.setFixedHeight(328)
self.config = config(self)
# récupération des éléments interactifs
self.texteMorse = self.ui.findChildren(QTextEdit, 'texteMorse')[0]
self.envoyer = self.ui.findChildren(QPushButton, 'envoyer')[0]
effacer = self.ui.findChildren(QPushButton, 'effacer')[0]
self.configuration = self.ui.findChildren(QPushButton, 'configuration')[0]
quitter = self.ui.findChildren(QPushButton, 'quitter')[0]
self.barreDeStatus = self.ui.findChildren(QLineEdit, 'barreDeStatus')[0]
self.controller = ControllerMorse(self)
self.setCentralWidget(self.ui)
self.show()
# liaison avec les controllers des boutons
self.envoyer.clicked.connect(lambda checked: self.threadpool.start(self.controller))
self.configuration.clicked.connect(lambda checked: self.config.show())
effacer.clicked.connect(lambda checked: self.texteMorse.setText(""))
quitter.clicked.connect(quit)
def creerErreur(self, messageErreur):
"""
Permet de générer une erreur critique. Lorsqu'on la ferme, le programme s'arrête.
Parameters
----------
messageErreur : str
Le message qui sera affiché dans la fenêtre d'erreur.
Si le paramètre n'est pas de type str, "Vérifiez les logs" se met par défaut.
"""
if not isinstance(messageErreur, str):
messageErreur = "Vérifiez les logs."
erreur = QMessageBox(QMessageBox.Critical, "Erreur", "Erreur critique", QMessageBox.Close)
erreur.setInformativeText(messageErreur)
ret = erreur.exec()
if ret == QMessageBox.Close:
self.close()
self.threadpool.clear()
exit()
if __name__ == '__main__':
app = QApplication(argv)
window = InterfaceMorse()
exit(app.exec_())