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 :

Bonne façon de déclarer un signal avec information [QtCore]


Sujet :

PyQt 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 684
    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 684
    Points : 30 973
    Points
    30 973
    Billets dans le blog
    1
    Par défaut Bonne façon de déclarer un signal avec information
    Bonjour à tous

    Je viens ici demander vos avis sur la bonne façon de transmettre une information par un signal.

    Jusqu'à présent, je me contentais de bazarder bêtement l'info après le signal. Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QByteArray data;
    ...(remplissage de data)...
    self.emit(SIGNAL("action"), data)

    Et de l'autre coté, la data était bien récupérée
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def slotAction(self, data):
        print("data=", data)
    # slotAction()
     
    connect(
        objet,
        SIGNAL("action"),
        self.slotAction,
    )

    Toutefois, j'ai vu qu'on pouvait aussi "forcer" un typage fort sur le signal à la mode "C++". Exemple
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    QByteArray data;
    ...(remplissage de data)...
    self.emit(SIGNAL("action(QByteArray*)"), data)

    Et de l'autre coté
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def slotAction(self, data):
        print("data=", data)
    # slotAction()
     
    connect(
        objet,
        SIGNAL("action(QByteArray*)"),
        self.slotAction,
    )

    D'où ma question: puisque ça fonctionne sans, est-ce nécessaire de coder de cette façon ??? Ou inversement, cela pose-t-il un problème si on n'utilise pas ce typage ???
    Surtout que si on utilise un typage précis, alors plus question de mettre autre chose qu'un QByteArray dans le signal...

    Voilà - Merci à tous de votre attention

    PS: je m'absente demain (24/11) jusqu'au 14/12 et ne suis pas certain d'avoir du wifi là où je vais. Donc si je ne reviens pas de suite dans ce topic, je vous prie de ne pas vous en offusquer.
    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
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 281
    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 281
    Points : 36 768
    Points
    36 768
    Par défaut
    Salut,

    Citation Envoyé par Sve@r Voir le message
    D'où ma question: puisque ça fonctionne sans, est-ce nécessaire de coder de cette façon ??? Ou inversement, cela pose-t-il un problème si on n'utilise pas ce typage ???
    Surtout que si on utilise un typage précis, alors plus question de mettre autre chose qu'un QByteArray dans le signal...
    Ça ne sert à pas grand chose puisqu'en Python le typage est dynamique. Cependant, çà permet aussi de réaliser des surcharges qui peuvent être intéressantes. Voir la documentation pour les détails.

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

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

    De retour comme annoncé. Merci de ta réponse et surtout pour le lien. Ca me fait aussi penser que je ne sais pas trop quand utiliser un signal et quand utiliser un pysignal mais je vais d'abord chercher par moi-même avant de revenir ici poser mes questions si j'en ai.

    Résolu
    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]

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

    En tout cas, la méthode que tu utilises avec SIGNAL ne marche plus avec PyQt5. Et la nouvelle méthode, obligatoire avec PyQt5, marchait déjà avec PyQt4.

    J'utilise souvent la communication avec messages, et ça marche très bien:

    - pour l'émission: widgetemetteur.nomdusignal.emit(objetàtransmettre) . A noter que l'émetteur ne sait pas qui va récupérer le message! L'objet à transmettre est optionnel.

    - pour la réception: widgetemetteur.nomdusignal.connect(méthodeàlancer) . Mais le récepteur du message doit savoir quel widgetemetteur va lui envoyer un message.

    - la méthode à lancer est précédée par un décorateur: @QtCore.pyqtSlot(typeobjetàtransmettre) le type d'objet à transmettre pouvant être un objet Python (str, int, float, ...) ou un type C++ entre guillemet.

    - au sein de la classe d'un objet PyQt, on peut créer un nouveau signal avec nouveausignal = QtCore.pyqtSignal(typeobjetàtransmettre) et l'utiliser comme ci-dessus. Il n'est pas nécessaire de déclarer de cette façon un signal déjà existant de Qt.

    - il m'arrive aussi (rarement) d'utiliser QtCore.pyqtProperty dans le codage des widgets "customisés" utilisables avec Qt Designer, pour faciliter la configuration de ces widgets directement sous Designer.

    C'est tout ce que j'utilise couramment, et une fois qu'on a compris comment ça marche, c'est très facile à coder.
    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

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

Discussions similaires

  1. [AJAX] Bonne façon de programmer avec Ajax ?
    Par kayoum dans le forum AJAX
    Réponses: 2
    Dernier message: 05/10/2010, 16h47
  2. Réponses: 3
    Dernier message: 22/06/2006, 17h39
  3. Réponses: 3
    Dernier message: 21/03/2006, 10h37
  4. [Variable] Déclarer une variable avec un nom dynamique
    Par jacquesh dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 10/02/2006, 14h11
  5. reccuperer un signal avec port //
    Par matterazzo dans le forum C++Builder
    Réponses: 1
    Dernier message: 10/10/2005, 16h19

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