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 :

Exemple de connexion de signal avec PyQt 5


Sujet :

PyQt Python

  1. #1
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut Exemple de connexion de signal avec PyQt 5
    Bonjour,

    1)Est il possible de passer en argument d'une fonction un string par exemple en appuyant sur un bouton? Et si oui auriez vous un exemple à me donner?
    2)Est ce que l'un d'entre vous pourrait me fournir un petit exemple pour associer à un bouton le déplacement d'un rectangle?

    Merci d'avance.

    Sylvestre

  2. #2
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Citation Envoyé par Sylvestre13 Voir le message
    Bonjour,

    1)Est il possible de passer en argument d'une fonction un string par exemple en appuyant sur un bouton? Et si oui auriez vous un exemple à me donner?
    Oui on peut passer un (des) argument(s) dans une méthode connect() avec une lambda mais si la string est codée "en dur" ça n'a pas beaucoup de sens par contre, si elle (la string) est lue, par exemple, dans une QLineEdit alors appelle une fonction qui relèvera le contenu de cette QLineEdit et procédera à la suite du code.

    2)Est ce que l'un d'entre vous pourrait me fournir un petit exemple pour associer à un bouton le déplacement d'un rectangle?
    Le QButton ne fait qu'émettre un signal, tu le connectes à la fonction que tu veux. Si ton problème est le déplacement du rectangle, faudra montrer du code.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Re bonjour,

    Voici le code,

    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
    import sys
    from PyQt5.QtWidgets import *
    from PyQt5.QtCore import *
    from PyQt5.QtGui import *
     
    class test(QWidget):
        def __init__(self):
            QWidget.__init__(self)
            self.setGeometry(20,20,300,300)
            group = QGroupBox()
     
            self.button1 = QPushButton("bouton1",group)
            self.button2 = QPushButton("bouton2",group)
            self.button3 = QPushButton("bouton3",group)
     
            self.button2.move(100,100)
            self.button3.move(150,150)
     
            coco = QGridLayout(self)
            coco.addWidget(group)
     
            signalMapper = QSignalMapper(self)
            signalMapper.setMapping(self.button1, 1)
            signalMapper.setMapping(self.button2, 2)
            self.button1.clicked.connect(signalMapper.map)
            self.button2.clicked.connect(signalMapper.map)
            signalMapper.mapped.connect(self.test)
     
            signalMapper1 = QSignalMapper(self)
            signalMapper1.setMapping(self.button3, 3)
            self.button3.clicked.connect(signalMapper1.map)
            signalMapper1.mapped.connect(self.testeur1)
     
        def paintEvent(self, e):
            self.qp = QPainter()
            self.qp.begin(self)
            self.drawRectangles(self.qp)
            self.testeur1(self.qp)
            self.qp.end()
     
        def drawRectangles(self,qp):
            self.qp.setPen(Qt.darkGreen)
            self.toto = self.qp.drawRect(50, 50, 150, 200)
     
        def keyPressEvent(self, e):
            if e.key() == Qt.Key_Escape:
                self.button.close()
     
        def testeur1(self,a):
            if a == 3:
                self.drawRectanglesbis(self.qp)
     
        def drawRectanglesbis(self,qp):
            self.qp.setPen(Qt.black)
            self.toto = self.qp.drawRect(50, 50, 200, 350)
     
        def enterEvent(self,e):
            print("toto")
     
        def test(self,arg):
            if arg == 1:
                print("b")
            if arg == 2 :
                print("Okkay")
     
    app = QApplication(sys.argv)
    tortue = test()
    tortue.show()
    sys.exit(app.exec_())
    J'aimerai pouvoir passer des arguments autres que des int par les boutons 1 et 2, par exemple des string.
    J'aimerai également pouvoir via le bouton 3, dessiner un nouveau rectangle.

    Cordialement,

    Sylvestre

  4. #4
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Et bien, tu sais connecter tes boutons au bonnes fonctions, je vois.

    Par contre, le bouton3 appelle une fonction qui utilise un QPainter créé ailleurs et qui a été fermé, tu auras une erreur. Il faut recréer un QPainter dans la deuxième fonction.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    laborantin cimenterie
    Inscrit en
    Décembre 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : laborantin cimenterie
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2014
    Messages : 12
    Points : 5
    Points
    5
    Par défaut
    Merci pour tes réponses.
    J'ai rajouté un nouveau qpainter, j'ai aussi testé en enlevant la ligne self.qp.end(), maintenant je n'ai plus le message painter not active mais j'obtiens à la place un crash de l'application.

    @+

  6. #6
    Expert éminent

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

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 300
    Points : 6 780
    Points
    6 780
    Par défaut
    Il faut créer un QPainter dans chacune des deux fonctions et terminer ces fonctions avec qp.end()

    Pas besoin de référencer le QPainter à self.

Discussions similaires

  1. Réponses: 1
    Dernier message: 22/08/2015, 18h25
  2. Exemple de connexion avec une base Oracle
    Par zoom61 dans le forum ASP
    Réponses: 10
    Dernier message: 22/01/2009, 14h58
  3. Réponses: 3
    Dernier message: 21/03/2006, 10h37
  4. Connexion à SQL Server avec ASP
    Par ayobo dans le forum ASP
    Réponses: 3
    Dernier message: 25/05/2004, 17h06
  5. [JDBC][connexion persistante] performances avec JDBC
    Par nawac dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 06/05/2003, 10h37

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