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 :

Différencier un signal émis par l'utilisateur d'un signal émis dans le code [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut Différencier un signal émis par l'utilisateur d'un signal émis dans le code
    Bonjour,

    je me retrouve face à un problème que je ne parviens pas à résoudre. J'ai un widget "QComboBox" que j'ai connecté de la façon suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.ui.maComboBox.currentIndexChanged[QString].connect(self.maFonction)
    Afin que maFonction soit appelée lorsque l'utilisateur choisit un élément dans le menu déroulant. Ce choix est alors stocké dans une variable:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    def maFonction(self, choix):
        self.choixComboBox = str(choix)
    Pas de souci jusque là, le problème est que j'ai une fonction d'initialisation de l'IHM où je fais:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    idChoix = self.ui.maComboBox.findText(self.choixComboBox)
    self.ui.maComboBox.setCurrentIndex(idChoix)
    Je vais récupérer la valeur de choixComboBox stockée dans un fichier, afin d'afficher directement le bon élément de ma comboBox à l'ouverture de l'IHM.
    En appelant setCurrentIndex, le signal currentIndexChanged est émis donc maFonction est appelée, or je ne le souhaite pas ici!
    Comment faire pour que dans maFonction, je différencie si l'index de la comboBox a été changé par l'utilisateur ou appelé via setCurrentIndex?

    Merci d'avance pour votre aide.

  2. #2
    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,

    J'entrevois une solution un peu rustique:

    Pendant l'initialisation, on crée une variable logique (self.init) initialisée à False.

    Avant d'appeler setCurrentIndex, on met la variable à True.

    A l'intérieur de la méthode "maFonction", on teste cette variable logique: si elle est True, on est dans l'initialisation: on ne fait rien d'autre que de mettre cette variable à False. Sinon, c'est le cas normal.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Salut
    Plus moderne serait de regarder comment dire a Qt d'ignorer les signaux pour la séquence d'initialisation.
    C'est ce que devrait faire la méthode /.blockSignals(boolean)/ appliquée au widget.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    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 wiztricks,

    Je ne connaissais pas, et je préfère nettement: merci!

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 681
    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 681
    Par défaut
    Salut Tyrtamos,
    Citation Envoyé par tyrtamos Voir le message
    Je ne connaissais pas, et je préfère nettement: merci!
    Ah ben oui, Qt, c'est une documentation épaisse dans laquelle on ne sait pas que chercher et ou on a beaucoup trop de solutions pour un même problème.
    Dans le cas particulier, on pourrait aussi:
    • utiliser disconnect (signal wide plutot qu'Object wide)
    • revoir la séquence d'initialisation des .widgets pour avoir 2 étapes:
      - initialisation de la statique avec les informations persistantes,
      - connexion des signaux.

    Je préfère la deuxième méthode car elle sera beaucoup plus "passe partout".
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    Bonjour,
    merci pour vos réponses,
    l'idée de ne faire la connexion des widgets qu'après l'initialisation me paraît très bien, je n'y avais pas pensé! je pense que je vais partir là-dessus, mais je vais aussi jeter un coup d’œil à blockSignals qui a l'air intéressant.

    Merci beaucoup!

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

Discussions similaires

  1. Comment récupérer le signal émis par un bouton workflow?
    Par AmFaye dans le forum Odoo (ex-OpenERP)
    Réponses: 3
    Dernier message: 26/12/2013, 13h32
  2. creation d'une fonction par l'utilisateur
    Par michelk dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 15/03/2005, 09h53
  3. Modifier un type défini par l'utilisateur
    Par soazig dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/08/2004, 12h47
  4. Réponses: 10
    Dernier message: 18/11/2003, 18h01
  5. Fonctions définies par l'utilisateur
    Par DiGueDao dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/06/2003, 11h17

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