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 :

Problème de base signal / slot [QtCore]


Sujet :

PyQt Python

  1. #1
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut Problème de base signal / slot
    Bonjour,

    j'ai un problème qui me semble basique mais mon code ne fonctionne pas. J'ai essayé de le modifier mais soit le signal n'est pas émis, soit le signal n'arrive pas au slot...

    Résumé:

    - Python3.x

    - Une classe Emitter qui émet un signal. (seul le "signal0" est utilisé)

    - Une classe Receiver qui doit recevoir le signal.

    - Une classe TestDialog qui est un GUI contenant deux boutons (seul le bouton 1 sert). Un appui sur Button1 fait emmètre un signal par l'instance de classe Emitter (qui s'appelle donc "emitter"). Notez le connect() dans l'__init__() dans la classe Receiver.

    Problème: pas de signal reçu dans l'instance de classe Receiver.

    Code python : 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
     
    import sys
    from PyQt4 import QtCore
    from PyQt4 import QtGui
     
    class TestDialog(QtGui.QDialog):
        def __init__(self, parent = None):
            super(TestDialog, self).__init__(parent)
     
            #GUI stuffs
            self.button1 = QtGui.QPushButton("Button1")
            self.connect(self.button1, QtCore.SIGNAL("clicked()"), self.on_button1)        
            self.button2 = QtGui.QPushButton("Button2")
            self.connect(self.button2, QtCore.SIGNAL("clicked()"), self.on_button2)        
     
            self.HBox = QtGui.QHBoxLayout()
            self.HBox.addWidget(self.button1)
            self.HBox.addWidget(self.button2)
     
            self.setLayout(self.HBox)
     
            # classes that emit and receive signals.
            self.emitter = Emitter()
            self.receiver = Receiver(self.emitter)        
     
     
        def on_button1(self):
            ''' Emit signal0 from emitter '''
            self.emitter.emit_sig0()
     
        def on_button2(self):
            pass
     
    class Emitter(QtCore.QObject):
        ''' Class that emits a signal'''
     
        signal0 = QtCore.pyqtSignal()
        signal1 = QtCore.pyqtSignal(int)
     
        def __init__(self, parent = None):
            super(Emitter, self).__init__(parent)
     
        def emit_sig0(self):
            ''' Emits signal0 '''
     
            print("Emitting signal0")
            self.signal0.emit()
     
     
    class Receiver(QtCore.QObject):
        ''' Class that receives signals '''
     
        def __init__(self, emitter):
            self.emitter = emitter
     
            # connect to signal0        
            self.emitter.signal0.connect(self.receive_signal0)        
     
        def receive_signal0(self):
            ''' Receives signal0 '''
            print("Signal0 received !")
     
     
     
    def main(argv):
        app = QtGui.QApplication(argv)
     
        form = TestDialog()
     
        form.show()
     
        app.exec_()    
     
    if __name__ == '__main__':
        main(sys.argv)

    Hmmm si quelqu'un voit d'où peut venir le problème... Je me sens bête, je vois pas d'où ça peut venir. C'est surement une broutille mais...

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 462
    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 462
    Points : 9 249
    Points
    9 249
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    C'est très simple: la déclaration de la classe Receiver doit être complétée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Receiver(QtCore.QObject):
        ''' Class that receives signals '''
     
        def __init__(self, emitter, parent=None):
            super(Receiver, self).__init__(parent)
    Sans l'appel à super, la classe ne bénéficie pas de toutes les fonctionnalités de la classe dont elle hérite.

    Après cette correction, ton code marche (et sous Python 2.7 encore!)
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Rhhaaaa !!! Je suis désolé d'avoir oublier un truc aussi bête.

    Merci beaucoup tyrtamos pour ton aide ! C'est très sympathique.

    Résolu et +1 pour tyrtamos.

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

Discussions similaires

  1. Problème avec un signal/slot
    Par scary dans le forum Qt
    Réponses: 12
    Dernier message: 11/12/2009, 21h20
  2. Problème de connect (signal/slots)
    Par Alain Defrance dans le forum Qt
    Réponses: 5
    Dernier message: 20/03/2008, 21h58
  3. Connexion "directe" signal - slot
    Par broidsy dans le forum Qt
    Réponses: 3
    Dernier message: 27/02/2006, 09h37
  4. Problème de base MySQL avec installation de script
    Par JoN28fr dans le forum Installation
    Réponses: 3
    Dernier message: 27/10/2005, 18h34
  5. Problème connection base
    Par krfa1 dans le forum ASP
    Réponses: 5
    Dernier message: 15/09/2005, 15h58

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