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

PyQt Python Discussion :

Déplacer un Qlabel


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 21
    Par défaut Déplacer un Qlabel
    Bonjour

    j'utilise le code ci-dessous pour ajouter une image sur mon interface par le biais d'un signal

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    self.pushButton.clicked.connect(self.AddSource)
     
    def AddSource(self):
     
            self.label10 = QtGui.QLabel(MainWindow)
            pic = self.label10
     
            pic.setGeometry(200, 200, 50, 50)
            pic.setPixmap(QtGui.QPixmap(os.getcwd() + "/Generateur.png"))
            pic.show()
    Seulement mon image est figée et j'aimerai qu'elle soit deplacable.

    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Les déplacements d'objets par l'utilisateur se font en réimplémentant mousePressEvent et mouseMoveEvent mais j'ai tout de même du mal à comprendre ce que tu veux faire, les widgets occupent une place choisie pour raisons d'ergonomie ou de contexte de boîte d'outils.

    Ton QLabel est le seul widget de ton interface ?

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 21
    Par défaut
    Oui je me suis rendu compte qu'il fallait que je ré-implémente mousePressEvent et mouseMoveEvent; seulement je sais pas comment m'y prendre.

    je veux mettre en place un simulateur de réseau électrique.

    Pour l'instant j'ai créé un bouton qui permet d'ajouter un générateur sur l'interface (le générateur est juste une image que j'ai placé dans un label et j'ai relié le tout a mon bouton grâce au signal clicked).

    Je me disais alors que si j'arrive a trouver un code permettant de déplacer un label je pourrait alors déplacer mon générateur sur l'interface puisqu'ilest contenu dans un label. S'il est fixe ça n'a pas vraiment d’intérêt parce que le but est de pouvoir déplacer les objets du réseau électrique et de les interconnecter.

    Tu vois maintenant un peu ce que je veux faire?

    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Je suppose qu'après le générateur viendront d'autres composants ...

    L'interface elle-même n'est pas faite pour cela, tu devrais plutôt regarder du côté du QGraphicsView.

    Il y a ce machin qui n'est pas trop mal:
    http://vincent-vande-vyvre.developpe...qgraphicsitem/

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il y avait longtemps que je n'avais pas essayé un truc comme ça: voilà un petit code qui affiche une image jpg et la déplace avec la souris. Pour essayer, il suffit de changer le nom de l'image (ici image01.jpg).

    Et la solution QGraphicsScene/QGraphicsView est effectivement assez simple. Et ce qui est surprenant, c'est qu'on peut même déplacer l'image en dehors du cadre d'affichage!

    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
    """
    Affiche une image dans un QGraphicsScene/QGraphicsView et la déplace avec 
    la souris
     
    Avec aide de: 
    http://vincent-vande-vyvre.developpez.com/tutoriels/pyqt/qgraphicsitem/
    """
     
    import sys
     
    from PyQt5 import QtCore, QtGui, QtWidgets
     
    #############################################################################
    class ItemImage(QtWidgets.QGraphicsPixmapItem):
     
        #========================================================================
        def __init__(self, pixMap, parent=None):
            super().__init__(pixMap, parent)
     
            # configure pour qu'on puisse bouger l'image
            self.setFlags(QtWidgets.QGraphicsItem.ItemIsMovable | 
                          QtWidgets.QGraphicsItem.ItemIsFocusable) 
     
        #========================================================================
        def mousePressEvent(self, event):
            """permet de sauvegarder la position de la souris au clic gauche
            """ 
            pos = event.scenePos() 
            if event.button() == 1: 
                self.old_X, self.old_Y = pos.x(), pos.y() 
                event.accept() 
            else: 
                event.ignore() 
     
        #========================================================================
        def mouseMoveEvent(self, event): 
            """déplace l'image avec la souris
            """
            pos = event.scenePos() 
            X, Y = pos.x(), pos.y() 
            delta_X, delta_Y = X - self.old_X, Y - self.old_Y 
            self.moveBy(delta_X, delta_Y) 
            self.old_X, self.old_Y = X, Y 
            event.accept()
     
    #############################################################################
    class GraphicsView(QtWidgets.QGraphicsView):
     
        #========================================================================
        def __init__(self, parent=None):
            super().__init__(parent)
     
            self.resize(400, 300)
     
            self.scene = QtWidgets.QGraphicsScene(self)
     
            fichierImage = "image01.jpg"
            self.pixMap = QtGui.QPixmap(fichierImage)
            self.pixMap = self.pixMap.scaledToWidth(150, QtCore.Qt.SmoothTransformation)
            self.itemImage = ItemImage(self.pixMap)
            self.scene.addItem(self.itemImage)
     
            self.setScene(self.scene)
     
    #############################################################################
    if __name__ == '__main__':
        app = QtWidgets.QApplication(sys.argv)
        graphicsView = GraphicsView()
        graphicsView.show()
        sys.exit(app.exec_())
    C'est écrit en PyQt5, mais je suppose qu'en remplaçant simplement QtWidgets par QtGui, ça marchera aussi sous PyQt4.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2015
    Messages : 21
    Par défaut
    Merci bien a vous tyrtamos et VinsS.

    tyrtamos ta solution marche très bien mais le souci c'est que j'ai crée mes bouton et mes signaux pour afficher les images dans une classe Ui_MainWindow :

    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
    class Ui_MainWindow(object):
     
        def setupUi(self, MainWindow):
            MainWindow.setObjectName(_fromUtf8("MainWindow"))
            MainWindow.resize(800, 600)
            #MainWindow.setCursor(QtGui.QCursor(QtCore.Qt.CrossCursor))
            MainWindow.setMouseTracking(True)
            MainWindow.setFocusPolicy(QtCore.Qt.ClickFocus)
            MainWindow.setAcceptDrops(True)
            self.centralwidget = QtGui.QWidget(MainWindow)
            self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
            self.graphicsView = QtGui.QGraphicsView(self.centralwidget)
            self.graphicsView.setGeometry(QtCore.QRect(170, 80, 400, 300))
            self.graphicsView.setObjectName(_fromUtf8("graphicsView"))
            self.pushButton = QtGui.QPushButton(self.centralwidget)
            self.pushButton.setGeometry(QtCore.QRect(20, 70, 101, 23))
            self.pushButton.setObjectName(_fromUtf8("pushButton"))
     
            self.pushButton.clicked.connect(self.AddBus)
     
        def AddBus(self):
     
            pic2 = QtGui.QLabel(MainWindow)
            pic2.setGeometry(200, 300, 50, 50)
            pic2.setPixmap(QtGui.QPixmap(os.getcwd() + "/Bus.png"))
            pic2.show()
     
    if __name__ == "__main__":
        app = QtGui.QApplication(sys.argv)
        MainWindow = QtGui.QMainWindow()
        ui = Ui_MainWindow()
        ui.setupUi(MainWindow)
        MainWindow.show()
        sys.exit(app.exec_())
    comment est ce que je peux intégrer ta solution dans mon cas?

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Déplacer des Qlabel et mise à jour
    Par rossjojos dans le forum Débuter
    Réponses: 2
    Dernier message: 29/04/2010, 12h29
  2. déplacer un fichier
    Par bourinator dans le forum C
    Réponses: 9
    Dernier message: 24/09/2003, 20h29
  3. Réponses: 5
    Dernier message: 24/04/2003, 22h08
  4. Déplacer la sélection d'une ligne dans un stringgrid
    Par jer64 dans le forum Composants VCL
    Réponses: 5
    Dernier message: 14/03/2003, 00h57
  5. TChart : déplacer un point
    Par Nicolas dans le forum C++Builder
    Réponses: 3
    Dernier message: 06/11/2002, 18h05

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