IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GUI Python Discussion :

creation application logigrame de depannage


Sujet :

GUI Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 106
    Points : 98
    Points
    98
    Par défaut creation application logigrame de depannage
    bonjour,
    ci joint mon début de code de mon application pour la rédaction des logigramme de depannge,

    un aperçu de l’application
    Nom : image projet.jpg
Affichages : 82
Taille : 55,6 Ko

    j'ai un probleme lors du groupage les zone de text modifiable ne sont plus accessible pouvez vous m’aide?

    merci d'avance
    Nicogef
    custom_delegate.py
    custom_table_widget.py
    draggable_diamond.py
    draggable_group.py
    graphics_rect_item.py
    globals.py
    main.py
    styles.css

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 978
    Points : 7 409
    Points
    7 409
    Par défaut
    Bonjour,

    Pouvez vous reproduire votre problème sur un code simple, afin de savoir ce que vous appelez "groupage", qui serait testable et permettrait de vérifier l'absence des textes ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 106
    Points : 98
    Points
    98
    Par défaut
    bonjour
    ci joint le code pour essai

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsRectItem, QTableWidget, \
        QGraphicsProxyWidget, QGraphicsItemGroup, QTableWidgetItem, QTextEdit
    from PyQt5.QtCore import QRectF, Qt
     
     
    class GraphicsRectItemWithTable(QGraphicsRectItem):
        def __init__(self):
            super().__init__()
     
            # Taille et couleur du rectangle
            self.setRect(0, 0, 300, 100)
            self.setBrush(Qt.lightGray)
            self.setFlag(QGraphicsRectItem.ItemIsSelectable)
            self.setFlag(QGraphicsRectItem.ItemIsMovable)
            self.setFlag(QGraphicsRectItem.ItemIsFocusable, True)
     
            # Créer un tableau dans le rectangle
            self.table_widget = QTableWidget(3, 3)
            self.table_widget.setFocusPolicy(Qt.StrongFocus)
            self.table_widget.setEditTriggers(QTableWidget.AllEditTriggers)
            self.table_widget.setSelectionMode(QTableWidget.SingleSelection)
            self.proxy_widget = QGraphicsProxyWidget(self)
            self.proxy_widget.setWidget(self.table_widget)
     
            # Placer le tableau dans le rectangle
            self.proxy_widget.setGeometry(QRectF(1, 1, 298, 98))
            self.table_widget.adjustSize()
     
        def setTextEditable(self, editable):
            for row in range(self.table_widget.rowCount()):
                for col in range(self.table_widget.columnCount()):
                    widget = self.table_widget.cellWidget(row, col)
                    if isinstance(widget, QTextEdit):
                        widget.setReadOnly(not editable)
                        widget.setTextInteractionFlags(
                            Qt.TextEditorInteraction if editable else Qt.NoTextInteraction
                        )
     
     
    class MainWindow(QGraphicsView):
        def __init__(self):
            super().__init__()
            self.setScene(QGraphicsScene(self))
     
            # Créez les deux éléments graphiques avec tableaux
            rect_item1 = GraphicsRectItemWithTable()
            rect_item1.setFlag(QGraphicsRectItem.ItemIsSelectable)
            rect_item1.setFlag(QGraphicsRectItem.ItemIsMovable)  # Assurez-vous que cet élément est déplaçable
            rect_item1.setPos(50, 50)  # Positionner le premier rectangle
     
            rect_item2 = GraphicsRectItemWithTable()
            rect_item2.setFlag(QGraphicsRectItem.ItemIsSelectable)
            rect_item2.setFlag(QGraphicsRectItem.ItemIsMovable)  # Assurez-vous que cet élément est déplaçable
            rect_item2.setPos(400, 50)  # Positionner le deuxième rectangle
     
            # Ajoutez les éléments à la scène
            self.scene().addItem(rect_item1)
            self.scene().addItem(rect_item2)
     
            self.setSceneRect(0, 0, 800, 600)
     
     
    if __name__ == "__main__":
        app = QApplication([])
        window = MainWindow()
        window.show()
        app.exec_()

    deux tableaux non regroupe les déplacements de tableau est possible et la modification de texte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    from PyQt5.QtWidgets import QApplication, QGraphicsView, QGraphicsScene, QGraphicsRectItem, QTableWidget, \
        QGraphicsProxyWidget, QGraphicsItemGroup, QTableWidgetItem, QTextEdit
    from PyQt5.QtCore import QRectF, Qt
     
     
    class GraphicsRectItemWithTable(QGraphicsRectItem):
        def __init__(self):
            super().__init__()
     
            # Taille et couleur du rectangle
            self.setRect(0, 0, 300, 100)
            self.setBrush(Qt.lightGray)
            self.setFlag(QGraphicsRectItem.ItemIsSelectable)
            self.setFlag(QGraphicsRectItem.ItemIsMovable)
            self.setFlag(QGraphicsRectItem.ItemIsFocusable, True)
     
            # Créer un tableau dans le rectangle
            self.table_widget = QTableWidget(3, 3)
            self.table_widget.setFocusPolicy(Qt.StrongFocus)
            self.table_widget.setEditTriggers(QTableWidget.AllEditTriggers)
            self.table_widget.setSelectionMode(QTableWidget.SingleSelection)
            self.proxy_widget = QGraphicsProxyWidget(self)
            self.proxy_widget.setWidget(self.table_widget)
     
            # Placer le tableau dans le rectangle
            self.proxy_widget.setGeometry(QRectF(1, 1, 298, 98))
            self.table_widget.adjustSize()
     
        def setTextEditable(self, editable):
            for row in range(self.table_widget.rowCount()):
                for col in range(self.table_widget.columnCount()):
                    widget = self.table_widget.cellWidget(row, col)
                    if isinstance(widget, QTextEdit):
                        widget.setReadOnly(not editable)
                        widget.setTextInteractionFlags(
                            Qt.TextEditorInteraction if editable else Qt.NoTextInteraction
                        )
     
     
    class MainWindow(QGraphicsView):
        def __init__(self):
            super().__init__()
            self.setScene(QGraphicsScene(self))
     
            # Créez les deux éléments graphiques avec tableaux
            rect_item1 = GraphicsRectItemWithTable()
            rect_item1.setFlag(QGraphicsRectItem.ItemIsSelectable)
            rect_item1.setFlag(QGraphicsRectItem.ItemIsMovable)  # Assurez-vous que cet élément est déplaçable
            rect_item1.setPos(50, 50)  # Positionner le premier rectangle
     
            rect_item2 = GraphicsRectItemWithTable()
            rect_item2.setFlag(QGraphicsRectItem.ItemIsSelectable)
            rect_item2.setFlag(QGraphicsRectItem.ItemIsMovable)  # Assurez-vous que cet élément est déplaçable
            rect_item2.setPos(400, 50)  # Positionner le deuxième rectangle
     
            # Ajoutez les éléments à la scène
            self.scene().addItem(rect_item1)
            self.scene().addItem(rect_item2)
     
            # Créez un groupe d'éléments mais laissez les tableaux interactifs
            item_group = QGraphicsItemGroup()
            item_group.addToGroup(rect_item1)
            item_group.addToGroup(rect_item2)
     
            # Ajoutez le groupe à la scène
            self.scene().addItem(item_group)
     
            # Assurez-vous que le focus est appliqué correctement lors de l'interaction avec les tableaux
            rect_item1.setFocus()  # Force l'élément à recevoir le focus
            rect_item2.setFocus()  # Force également l'autre tableau à recevoir le focus
     
            self.setSceneRect(0, 0, 800, 600)
     
     
    if __name__ == "__main__":
        app = QApplication([])
        window = MainWindow()
        window.show()
        app.exec_()
    et le code avec groupage ou qu'il est impossible de modifier ou deplacer

    le code qui a changer entre les deux est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    # Créez un groupe d'éléments mais laissez les tableaux interactifs
            item_group = QGraphicsItemGroup()
            item_group.addToGroup(rect_item1)
            item_group.addToGroup(rect_item2)
     
            # Ajoutez le groupe à la scène
            self.scene().addItem(item_group)
     
            # Assurez-vous que le focus est appliqué correctement lors de l'interaction avec les tableaux
            rect_item1.setFocus()  # Force l'élément à recevoir le focus
            rect_item2.setFocus()  # Force également l'autre tableau à recevoir le focus
    merci d'avance pour votre aide
    nicogef

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    106
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 106
    Points : 98
    Points
    98
    Par défaut
    j'ai trouvé une autre solution
    mais me reste a trouvez une solution quand le texte est selectionner et que l'on quitte la zone texte il reste selectionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    from PyQt5.QtWidgets import QApplication, QGraphicsScene, QGraphicsView, QGraphicsRectItem, QGraphicsTextItem
    from PyQt5.QtCore import Qt, QTimer
    from PyQt5.QtGui import QPainter, QTransform
     
    class MyItem(QGraphicsRectItem):
        def __init__(self, x, y, width, height, text, color):
            super().__init__(0, 0, width, height)  # Taille relative au parent
            self.setBrush(color)
     
            # Ajouter un QGraphicsTextItem pour le texte modifiable
            self.text_item = QGraphicsTextItem(text, self)
            self.text_item.setTextInteractionFlags(Qt.NoTextInteraction)  # Texte non modifiable par défaut
            self.text_item.setPos(10, 10)  # Position relative au rectangle
     
            # Position globale du rectangle
            self.setPos(x, y)
     
        def enableTextEditing(self):
            """Activer l'édition du texte."""
            print(f"activer")
            self.text_item.setTextInteractionFlags(Qt.TextEditorInteraction)
            self.text_item.setFocus()
     
        def disableTextEditing(self):
            """Désactiver l'édition du texte et retirer la sélection."""
            print(f"desactiver")
            self.text_item.setTextInteractionFlags(Qt.NoTextInteraction)
            # Retirer la sélection explicitement
            self.text_item.setSelected(False)  # Retirer la sélection
            self.text_item.clearFocus()  # Retirer le focus
     
    class ParentItem(QGraphicsRectItem):
        def __init__(self, x, y, width, height):
            super().__init__(0, 0, width, height)  # Taille relative à la scène
            self.setBrush(Qt.lightGray)  # Couleur du rectangle parent
     
            # Créer deux rectangles enfants avec texte modifiable
            self.rect1 = MyItem(10, 10, 200, 100, "Texte modifiable 1", Qt.green)
            self.rect2 = MyItem(10, 120, 200, 100, "Texte modifiable 2", Qt.green)
     
            # Définir les enfants comme éléments du parent
            self.rect1.setParentItem(self)
            self.rect2.setParentItem(self)
     
            # Rendre le parent déplaçable
            self.setFlag(QGraphicsRectItem.ItemIsMovable, True)
     
            # Position globale du parent
            self.setPos(x, y)
     
    class CustomScene(QGraphicsScene):
        def __init__(self):
            super().__init__()
            self.active_text_item = None
     
        def mousePressEvent(self, event):
            """Gérer la sélection/désélection des textes et des éléments."""
            # Vérifier si un texte a été cliqué
            item = self.itemAt(event.scenePos(), QTransform())
            if isinstance(item, QGraphicsTextItem):
                parent = item.parentItem()
                if isinstance(parent, MyItem):
                    # Activer l'édition pour le texte cliqué
                    if self.active_text_item:
                        self.active_text_item.disableTextEditing()
                    parent.enableTextEditing()
                    self.active_text_item = parent
                    return
     
            # Désactiver l'édition du texte si on clique ailleurs
            if self.active_text_item:
                self.active_text_item.disableTextEditing()
                self.active_text_item = None
     
            super().mousePressEvent(event)
     
    if __name__ == '__main__':
        app = QApplication([])
     
        # Créer une scène personnalisée
        scene = CustomScene()
     
        # Ajouter deux rectangles parents avec enfants
        parent1 = ParentItem(50, 50, 300, 250)  # Premier rectangle gris
        parent2 = ParentItem(400, 50, 300, 250)  # Deuxième rectangle gris
     
        # Ajouter les rectangles parents à la scène
        scene.addItem(parent1)
        scene.addItem(parent2)
     
        # Créer une vue pour afficher la scène
        view = QGraphicsView(scene)
        view.setRenderHint(QPainter.Antialiasing)
        view.setRenderHint(QPainter.SmoothPixmapTransform)
        view.show()
     
        app.exec_()
    ci joint une image
    Nom : capture texte couleur.jpg
Affichages : 32
Taille : 22,9 Ko

    merci d'avance pour votre aide
    Nicogef

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 978
    Points : 7 409
    Points
    7 409
    Par défaut
    @nicogef

    Il manque un refresh de l'item dans la classe MyItem

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    def disableTextEditing(self):
        """Désactiver l'édition du texte et retirer la sélection."""
        print(f"desactiver")
        self.text_item.setTextInteractionFlags(Qt.NoTextInteraction)
        # Retirer la sélection explicitement
        self.text_item.setSelected(False)  # Retirer la sélection
        self.text_item.clearFocus()  # Retirer le focus
        self.text_item.update() # L'oubli (refresh du texte)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

Discussions similaires

  1. Avis creation application XMLRAD/PHP
    Par fetsa054 dans le forum XMLRAD
    Réponses: 3
    Dernier message: 06/02/2009, 09h22
  2. Création application page
    Par glucas59 dans le forum SharePoint
    Réponses: 3
    Dernier message: 04/11/2008, 12h31
  3. BCB : Création Application et Service
    Par akeix dans le forum C++Builder
    Réponses: 3
    Dernier message: 15/07/2007, 17h45
  4. Demande conseils pour création application
    Par Cryolite dans le forum Oracle
    Réponses: 2
    Dernier message: 06/04/2006, 20h04

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo