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 :

Utiliser une variable dans le nom d'un widget


Sujet :

PyQt Python

  1. #1
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut Utiliser une variable dans le nom d'un widget
    Bonsoir,

    je cherche une solution qui me permettrait de simplifier du code.
    J'ai une liste de QAction dans un QActionGroup lui même dans un QMenu.
    Je souhaite cocher le widget correspondant à ma valeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    OptionAc3Kbits = 128
    .......
    if OptionAc3Kbits == 128:
        self.ui.kbits_128.setChecked(True)
    elif OptionAc3Kbits == 192:
        self.ui.kbits_192.setChecked(True)
    elif OptionAc3Kbits == 224:
        self.ui.kbits_224.setChecked(True)
    elif OptionAc3Kbits == 256:
        self.ui.kbits_256.setChecked(True)
    ....
    Mais ca me parait bien lourd...

    Je voudrais pouvoir lui dire : Coche la case se nommant "kbits_{}".format(OptionAc3Kbits)

    j'ai testé pas mal de truc mais je n'ai réussis à parvenir à mes fins...
    Il n'aime pas le mélange widget + srt.

    J'ai voulu m'orienter vers l'action findChildren pour récupérer le widget à traiter mais je ne reçois que None à chaqu'un de mes tests.

    Est-ce possible ? et si oui est-ce plus rapide/simple qu'une succession de if/elif ?

    Merci à vous.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Pourquoi ne pas faire de kbits un dict et ecrire (un peu vite):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.kbits[OptionAc3Kbits].setChecked(True)
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    C'est ça que tu disais ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            kbits = {"128" : self.ui.kbits_128,
                     "192" : self.ui.kbits_192,
                     "224" : self.ui.kbits_224}
            valeur ="192"
            kbits[valeur].setChecked(True)
    En effet ça marche bien.

    En sachant que je ne réutiliserai pas le dictionnaire, quel est le meilleur comportement ?
    1) Créer un dictionnaire puis faire appel à lui pour lancer une commande
    2) Lancer une commande via des if/elif

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 736
    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 736
    Par défaut
    Si OptionAc3Kbits est un "int" on pourrait etre plus simple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            kbits = {128 : self.ui.kbits_128,
                                    192 : self.ui.kbits_192,
                                    224 : self.ui.kbits_224}
            valeur =192
            kbits[valeur].setChecked(True)
    En sachant que je ne réutiliserai pas le dictionnaire, quel est le meilleur comportement ?
    1) Créer un dictionnaire puis faire appel à lui pour lancer une commande
    2) Lancer une commande via des if/elif
    C'est un arbitrage entre maintenance/lisibilite et nombre de lignes qu'il n'est pas facile de trancher.
    En plus Python est "riche" en options.
    Un truc comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
         getattr(self.ui, 'kbits_%d' % value).setChecked(True)
    est pas mal non plus.

    En fait, les questions sont de savoir si "value" sera toujours valide ou s'il faut gérer l'erreur, si on va toujours taper dans 'kbits_%d' ou si le template "change",...

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

  5. #5
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 563
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getattr(self.ui, 'kbits_{}'.format(value)).setChecked(True)
    est parfait ! je ne connaissais pas.

    La valeur devrait toujours exister...

    merci beaucoup encore une fois

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

Discussions similaires

  1. [Batch] Utiliser une variable dans un nom de fichier
    Par ted the Ors dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 07/07/2013, 16h28
  2. Utiliser une variable dans le nom d'un controle
    Par Rpi78 dans le forum VB.NET
    Réponses: 2
    Dernier message: 20/04/2012, 19h30
  3. [Batch] Utiliser une variable dans un nom de variable ?
    Par THKKK dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 26/10/2010, 13h07
  4. Réponses: 1
    Dernier message: 30/05/2008, 11h51
  5. [FLASH MX2004] Utiliser une variable dans le code
    Par arnolem dans le forum Flash
    Réponses: 25
    Dernier message: 02/12/2005, 16h37

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