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

Python Discussion :

créer une animation sur un point dans QGraphicsView ?


Sujet :

Python

  1. #1
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut créer une animation sur un point dans QGraphicsView ?
    Bonjour;
    avec PYQT5 et dans QGraphicsView comment créer une animation sur spécifique point(x,y) comme l'image ci-dessous
    je fait le partie d'affichage des points a partir un fichier : poitns_file.txt (attaché a discusion ) sur mon code et il reste que le partie d'animation sur un point

    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
    98
    99
    100
    101
    102
    103
    104
    105
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
    from PyQt5.QtWidgets import *
    import sys
    from math import sqrt
    import pandas as pd
     
    class Viewer(QGraphicsView):
        photoClicked = pyqtSignal(QPoint)
        rectChanged = pyqtSignal(QRect)
     
        def __init__(self, parent):
            super(Viewer, self).__init__(parent)
            self.rubberBand = QRubberBand(QRubberBand.Rectangle, self)
            self.setMouseTracking(True)
            self.origin = QPoint()
            self.changeRubberBand = False
     
            self._zoom = 0
            self._empty = True
            self._scene = QGraphicsScene(self)
     
            self.setTransformationAnchor(QGraphicsView.AnchorUnderMouse)
            self.setResizeAnchor(QGraphicsView.AnchorUnderMouse)
            self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
            self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
            self.setFrameShape(QFrame.NoFrame)
            self.area = float()
            self.setPoints()
            self.fitInView()
     
        def setPoints(self):
            self._zoom = 0
            df = pd.read_csv('points_file.txt', sep=" ", header=None)
            df.columns = ["pt_name", "x", "y"]
            rad = 75
            for i in range(df.shape[0]):
                pt2 = QGraphicsEllipseItem(float(df["x"].iloc[i]), float(df["y"].iloc[i]), rad, rad)  # add point
                pt2.setBrush(QBrush(Qt.green))
     
     
            maxX = max(df['x'])
            minX = min(df['x'])
            maxY = max(df['y'])
            minY = min(df['y'])
            distance = sqrt((maxX-minX)**2+(maxY-minY)**2)
            self.setScene(self._scene)
            self.setDragMode(self.ScrollHandDrag)
     
        def fitInView(self, scale=True):
            rect = QRectF(self.area)
            if not rect.isNull():
                self.setSceneRect(rect)
                unity = self.transform().mapRect(QRectF(0, 0, 1, 1))
                self.scale(1 / unity.width(), 1 / unity.height())
                viewrect = self.viewport().rect()
                scenerect = self.transform().mapRect(rect)
                factor = min(viewrect.width() / scenerect.width(),
                             viewrect.height() / scenerect.height())
                self.scale(factor, factor)
                self._zoom = 0
     
     
        def wheelEvent(self, event):
                if event.angleDelta().y() > 0:
                    factor = 1.25
                    self._zoom += 1
                else:
                    factor = 0.8
                    self._zoom -= 1
                if self._zoom > 0:
                    self.scale(factor, factor)
                elif self._zoom == 0:
                    self.fitInView()
                else:
                    self._zoom = 0
     
    class Window(QWidget):
        def __init__(self):
            super(Window, self).__init__()
            self.viewer = Viewer(self)
            self.btnLoad = QToolButton(self)
            self.btnLoad.setText('Fit Into View')
            self.btnLoad.clicked.connect(self.fitPoints)
     
            VBlayout = QVBoxLayout(self)
            VBlayout.addWidget(self.viewer)
            HBlayout = QHBoxLayout()
            HBlayout.setAlignment(Qt.AlignLeft)
            HBlayout.addWidget(self.btnLoad)
     
            VBlayout.addLayout(HBlayout)
            self.viewer.fitInView()
     
        def fitPoints(self):
            self.viewer.fitInView()
     
     
    if __name__ == '__main__':
        import sys
        app = QApplication(sys.argv)
        window = Window()
        window.setGeometry(500, 300, 800, 600)
        window.show()
        sys.exit(app.exec_())
    Nom : Capture.gif
Affichages : 151
Taille : 18,4 Ko
    Fichiers attachés Fichiers attachés

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par rabeh.ram Voir le message
    avec PYQT5 et dans QGraphicsView comment créer une animation sur spécifique point(x,y) comme sur la photo ci-dessous
    Une animation, c'est juste changer l'état (par exemple: la couleur) d'un item à intervalle régulier...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Une animation, c'est juste changer l'état (par exemple: la couleur) d'un item à intervalle régulier...

    - W
    Merci wiztricks pour votre reponse ;
    oui j'ai eu cette idée de changé la couleur d'un point dans une boucle

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for i in range(1000):
          if colour_point==vert:
                colour_point-----> rouge
          else:
                colour_point-----> vert
    mais le probleme est que je ne savais pas comment récupérer la couleur actuelle d'un item sur QGraphicsView

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Citation Envoyé par rabeh.ram Voir le message
    mais le probleme est que je ne savais pas comment récupérer la couleur actuelle d'un item sur QGraphicsView
    Quand je ne sais pas, je cherche sur Internet des exemples d'animation avec QGraphicsView...

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Quand je ne sais pas, je cherche sur Internet des exemples d'animation avec QGraphicsView...

    - W
    Je n'ai pas trouvé la solution après longue recherche sur l'internet et je pense que la cause c'est les mots-clés de recherche j'espère que je trouve une solution avec vous

  6. #6
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 833
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 833
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Déjà ton code ne fonctionne pas. En ligne 28 tu écris self.area=float() et en ligne 51 tu écris rect = QRectF(self.area). Or un QRectF n'accepte pas un simple float en paramètre. Or ici on veut des codes fonctionnels pour tester sinon ben on ne peut pas tester donc on ne peut que supposer.
    Accessoirement mettre en tant que membre de classe un truc qui ne change pas...

    Citation Envoyé par rabeh.ram Voir le message
    mais le probleme est que je ne savais pas comment récupérer la couleur actuelle d'un item sur QGraphicsView
    Ben c'est toi qui l'a mis en vert !!! Ligne 39 pt2.setBrush(QBrush(Qt.green)). Donc tu connais déjà sa couleur !!!
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  7. #7
    Membre confirmé
    Homme Profil pro
    ngénieur d'etat en science géodésique et travaux topographique
    Inscrit en
    Septembre 2016
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : ngénieur d'etat en science géodésique et travaux topographique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2016
    Messages : 152
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben c'est toi qui l'a mis en vert !!! Ligne 39 pt2.setBrush(QBrush(Qt.green)). Donc tu connais déjà sa couleur !!!
    oui j'ai affecté la couleur vert pour l'élement graphique pt2 dans la ligne 39 ; et le probleme exactement c'ést comment vérifier la couleur d'object et puis changé dans une boucle (fait une animation)

    Nom : si color.PNG
Affichages : 82
Taille : 3,4 Ko

  8. #8
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour

    question étrange : il te suffit de sauvegarder ta couleur (à voir ou ?)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    self.colour_point = Qt.green
    pt2.setBrush(QBrush(self.saved_color))
     
    ...
     
    self.colour_point == Qt.green if self.colour_point == Qt.red else  Qt.red 
     
    ...
    Note : pour ta "boucle" ? on utilise un timer : on lance une fonction toutes les x secondes, peut être que ta bibliothèque Animation fait le job ?

    Pour modifier la couleur... aucune idée , je ne connais pas ta bibliothèque.
    Mais existe généralement que 2 techniques:
    - le graphique est un objet constitué d'autres objet : on modifie un attibut de l'élément désiré
    - un graphique plat type image : on relance la génération de tout le graphique (parfois on peut "geler" une partie pour ne pas avoir à tout réafficher)
    note: vu ta demande, parfois il est meilleur, possible(? ici aucune idée) de créer un widget transparent que l'on superpose à notre image, ici on ne modifie que notre widget

    pas trouvé la solution après longue recherche sur l'internet et je pense que la cause c'est les mots-clés de recherche
    Il y a pourtant beaucoup de réponses avec un simle "pyqt QGraphicsView animation change color", c'est toujours la même chose : pyqt - objet_Avec_qui_je_travaille - je_désire

Discussions similaires

  1. Quel outils pour créer une animation des données temporelle sur un globe
    Par tchize_ dans le forum SIG : Système d'information Géographique
    Réponses: 0
    Dernier message: 26/11/2018, 18h13
  2. Créer une animation dans un contrôle
    Par Franck.H dans le forum VB.NET
    Réponses: 1
    Dernier message: 07/02/2014, 20h41
  3. Réponses: 4
    Dernier message: 09/05/2012, 14h24
  4. Réponses: 2
    Dernier message: 15/02/2010, 10h34
  5. Réponses: 2
    Dernier message: 05/05/2009, 20h38

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