Le poste de contrôle (PC) / La fenêtre principale /
Refactoring

Amélioration de la structure du projet


Avant-propos

Réviser (ou apprendre) → Python : les dictionnaires.


Description

Vous êtes codeur, vous savez que rien n'est "codé dans le marbre" ☹, c'est une remise en question permanente.
A faire : Éditer la fenêtre main avec Qt Designer, pour renommer 4 widgets.

Rappel sur les TDD. 3 phases :
1 - Rouge : Les tests ne passent pas => Coding inexistant ou en cours.
2 - Vert : Les tests passent ⇒ Coding terminé.
3 - Refactoring : Réorganisation du code, groupement par classes, etc.
A faire : Remplacez tout le code de la fenêtre main par celui-ci.
- Les tests ne passent plus, c'est normal.
- A vous de jouer : Bon coding et bon courage !
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5.QtCore import QEvent
import sys

from functions.utils import Utils
ut = Utils()
if ut.ui2py():
    """ Si la compilation a réussi. """
    from fen_mere import Ui_MainWindow
else:
    """ Si la compilation a échoué. """
    raise SystemExit("La compilation des fichiers de Qt Designer a échoué.")


class UiMain(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        ut.restore_state(self)

        """ Événements. """
        self.dockNodes.installEventFilter(self)
        self.dockParams.installEventFilter(self)
        self.actionNodes.triggered.connect(self.visibility_nodes)
        self.actionParams.triggered.connect(self.visibility_params)

    """ Visibilité dockable des noeuds. """
    def visibility_nodes(self):
        """ Si visible => devient invisible et vice-versa. """
        self.dockNodes.setVisible(not self.dockNodes.isVisible())

    """ Visibilité dockable des paramètres. """
    def visibility_params(self):
        self.dockParams.setVisible(not self.dockParams.isVisible())

    def eventFilter(self, obj, ev):
        if ev.type() in [QEvent.Move, QEvent.Resize, QEvent.Hide, QEvent.Show]:
            ut.save_state(self)
        return super().eventFilter(obj, ev)

    def moveEvent(self, ev):
        """ Mémorisation de la géométrie. """
        ut.save_state(self)

    def resizeEvent(self, ev):
        """ Mémorisation de la géométrie. """
        ut.save_state(self)


if __name__ == '__main__':
    def start():
        app = QApplication(sys.argv)
        fen = UiMain()
        fen.show()
        sys.exit(app.exec())

    """ Affichage de la fenêtre. """
    start()

 


Snippets

Essayez de résoudre cette fonctionnalité par vous-même.
Consultez les réponses (snippets) seulement si vous n'avez pas trop de temps.