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 :

liste de pyqtSignal


Sujet :

Python

  1. #1
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut liste de pyqtSignal
    Bonjour

    Toujours dans mon évolution des signaux old-style vers new-style, je me heurte à certains soucis.

    Et l'un d'entre eux est que je n'arrive pas à créer des listes de pyqtSignal.

    Exemple qui fonctionne
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from PyQt4.QtCore import *
     
    class A(QObject):
    	def traitement(self, n):
    		print "traitement : Message bien recu ", n, type(n)
     
    class B(QObject):
    	signaler=pyqtSignal(int)
     
    a=A()
    b=B()
     
    b.signaler.connect(a.traitement)
    b.signaler.emit(123)

    Exemple qui ne fonctionne plus
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from PyQt4.QtCore import *
     
    class A(QObject):
    	def traitement(self, n):
    		print "traitement : Message bien recu ", n, type(n)
     
    class B(QObject):
    	signaler=[pyqtSignal(int),]
     
    a=A()
    b=B()
     
    b.signaler[0].connect(a.traitement)
    b.signaler[0].emit(123)
    Ca me répond "AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'". Pourtant, tablant sur le fait que si je stocke un truc dans une variable je peux aussi le stocker dans un tableau je ne vois pas trop où se situe mon erreur

    Enfin si, je me dis que pyqtSignal c'est un truc très spécial qui fait que. Mais donc est-il possible de faire ce que je veux faire ?

    Merci à tous de votre attention
    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]

  2. #2
    Membre éclairé
    Homme Profil pro
    BTS SN IR
    Inscrit en
    Mai 2017
    Messages
    513
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 24
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : BTS SN IR

    Informations forums :
    Inscription : Mai 2017
    Messages : 513
    Points : 700
    Points
    700
    Par défaut
    je ne suis absolument pas sur mais il semble que [ ] sur un signal permet de passer un argument, http://pyqt.sourceforge.net/Docs/PyQ...als_slots.html du moins c'est ce que je comprend.
    désolé de ne pas pouvoir t'aider plus par contre :'(

  3. #3
    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
    Salut,

    Il faut lier le signal à une référence, lorsque tu le places ainsi dans une liste ce n'est pas le cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Python 2.7.12 (default, Nov 19 2016, 06:48:10) 
    [GCC 5.4.0 20160609] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> from PyQt4.QtCore import QObject, pyqtSignal
    >>> class Foo(QObject):
    ...     sig = pyqtSignal(int)
    ...     sig2 = [pyqtSignal(int), ]
    ... 
    >>> f = Foo()
    >>> type(f.sig)
    <type 'PyQt4.QtCore.pyqtBoundSignal'>
    >>> type(f.sig2[0])
    <type 'PyQt4.QtCore.pyqtSignal'>
    Documenté ici:
    http://pyqt.sourceforge.net/Docs/PyQ...-bound-signals

  4. #4
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    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 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Il faut lier le signal à une référence, lorsque tu le places ainsi dans une liste ce n'est pas le cas.
    Merci de ta réponse. Effectivement j'aurais pensé à regarder le type() ça m'aurait aidé.

    Et effectivement dans la doc citée c'est bien écrit "When a signal is referenced as an attribute of an instance of the class then PyQt4 automatically binds the instance to the signal in order to create a bound signal."

    Mais ça reporte juste le problème. Y a-t-il donc un moyen de créer manuellement ce "bound signal", moyen que je pourrais donc ensuite placer dans une liste ???
    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]

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    2
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 2
    Points : 4
    Points
    4
    Par défaut liste, pas tuple
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Toujours dans mon évolution des signaux old-style vers new-style, je me heurte à certains soucis.

    Et l'un d'entre eux est que je n'arrive pas à créer des listes de pyqtSignal.

    Exemple qui fonctionne
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from PyQt4.QtCore import *
     
    class A(QObject):
    	def traitement(self, n):
    		print "traitement : Message bien recu ", n, type(n)
     
    class B(QObject):
    	signaler=pyqtSignal(int)
     
    a=A()
    b=B()
     
    b.signaler.connect(a.traitement)
    b.signaler.emit(123)

    Exemple qui ne fonctionne plus
    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
    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
     
    from PyQt4.QtCore import *
     
    class A(QObject):
    	def traitement(self, n):
    		print "traitement : Message bien recu ", n, type(n)
     
    class B(QObject):
    	signaler=[pyqtSignal(int),]
     
    a=A()
    b=B()
     
    b.signaler[0].connect(a.traitement)
    b.signaler[0].emit(123)
    Ca me répond "AttributeError: 'PyQt4.QtCore.pyqtSignal' object has no attribute 'connect'". Pourtant, tablant sur le fait que si je stocke un truc dans une variable je peux aussi le stocker dans un tableau je ne vois pas trop où se situe mon erreur

    Enfin si, je me dis que pyqtSignal c'est un truc très spécial qui fait que. Mais donc est-il possible de faire ce que je veux faire ?

    Merci à tous de votre attention
    est ce que ce n'est pas la declaration de la liste, enlever la virgule ----->class B(QObject): / signaler=[pyqtSignal(int)], je n'ai pas vérifié...

Discussions similaires

  1. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25
  2. Réponses: 2
    Dernier message: 04/10/2002, 09h13
  3. liste d'objets
    Par Pierrot dans le forum Langage
    Réponses: 2
    Dernier message: 27/09/2002, 09h56
  4. Compter le nombre ligne listée (COUNT) ?
    Par StouffR dans le forum Langage SQL
    Réponses: 7
    Dernier message: 02/09/2002, 09h41
  5. Listes déroulantes liées entre elles
    Par denisC dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 27/07/2002, 15h53

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