Le poste de contrôle (PC) / Les graphes /
Entrée en scène du premier node

Affichage du node au lancement de l'application


Avant-propos

Voir documentation de QGraphicsItemQGraphicsTextItemQCheckBox, QGraphicsProxyWidget.

Mode de remplissage Qt.WindingFill, Qt.OddEvenFill


Description

 


A faire - En remplacement du point 1 ci-dessus, nous allons créer un code provisoire pour afficher le node Signaux dans la scène.
  1. Appel de la méthode provisoire à la fin de  ctrl_scene.py > CtrlScene.setup() :
            """ Code provisoire pour afficher un node. """
            self.provisoire()
    

     

  2. Oui mais ... la méthode self.provisoire() n'existe pas ⇒ Ajoutons-la.
    ctrl_scene.py > CtrlScene.provisoire() :
        def provisoire(self):
            """ Provisoire. Ajout d'un node pour la mise au point. A supprimer après le coding du drag & drop. """
            from nodes.generateurs.signaux import Node
            Node(self, 'Node1')
    

     

  3. Oui mais ... ce code importe la classe Node qui n'existe pas ⇒ Ajoutons-la.
    Code de /nodes/generateurs/signaux.py :
    from pc.ctrl_node import CtrlNode
    d_datas = {
        'name': 'Signaux',
        'icon': 'signaux.png',
    }
    
    
    class Node(CtrlNode):
        def __init__(self, o_scene, s_id):
            super().__init__(o_scene, s_id)
            self.setup()
    
        def setup(self):
            # Code spécifique ...
            super().setup()
    

     

  4. Oui mais ... Cette classe Node hérite de la classe CtrlNode qui n'existe pas ⇒ Créons-la.
    Création du fichier /pc/ctrl_node.py. Copier-coller le code suivant :
    from ui_node import UiNode
    
    
    class CtrlNode:
        def __init__(self, o_scene, s_id):
            self.o_scene = o_scene
            self.o_gr_node = None
    
        def setup(self):
            self.o_gr_node = UiNode(self)       # Gestion de l'UI (Interface utilisateur) : dessin couleurs, ...
            self.o_scene.o_gr_scene.addItem(self.o_gr_node)     # Incorporation dans la scène.
    
    

     

  5. Oui mais ... la classe UiNode, nécessaire pour l'affichage, n'existe pas ⇒ Créons-la.
    Création du fichier /pc/ui_node.py. Copier-coller le code suivant :
    from PyQt5.QtWidgets import QGraphicsItem
    from PyQt5.QtCore import QRectF
    from PyQt5.QtGui import QPainterPath
    import pyqtgraph as pg
    
    
    class UiNode(QGraphicsItem):
        def __init__(self, o_node):
            super().__init__()
            self.o_node = o_node
            self.path_outline = QPainterPath()
            self.path_outline.addRoundedRect(0, 0, 96, 60, 6, 6)
    
        def boundingRect(self):
            return QRectF(0, 0, 96, 60).normalized()
    
        def paint(self, painter, QStyleOptionGraphicsItem, widget=None):
            painter.setPen(pg.mkPen(color="#000", width=4))
            painter.setBrush(pg.mkBrush(color='#8888bbaa')) # Opacité = 'aa'
            painter.drawPath(self.path_outline.simplified())
    

     

  6. Lancer le projet pour tester :


Avant de poursuivre, vous devez maîtriser le code qui précède : c'est un code à minima où chaque ligne est indispensable !

Nous avons là une base pour enrichir notre node, dans cet ordre :

  1. Node pouvant être déplacé à la souris.
  2. Mémorisation de sa position, dans le pkl.
  3. Rectification de sa position si la grille est magnétique.
  4. Ajout du titre.
  5. Sélection, survol et activation du node.
  6. Valeurs paramétrées. Certaines d'entre-elles dépendent de l'état :
    • Couleur de fond du contenu.
    • Couleur de fond du titre.
    • Couleur du texte du titre.
    • Couleur et épaisseur de la bordure.

1 - Node pouvant être déplacé à la souris : drag.

2 - Mémorisation (et restitution) de la position du node dans la scène :

3 - Rectification de la position du node lorsque la grille est magnétique :

4 - Ajout du titre :


 



5 - Sélection, survol et activation du node.


6 - Valeurs paramétrées :


Bonjour les codeurs !