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 :

Incrémentation QString' ou 'int'


Sujet :

PyQt Python

  1. #1
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut Incrémentation QString' ou 'int'
    Bonsoir, bonsoir !
    Je suis confronter à un problème et malgré de se que j''ai pu lire ici ou là je n'arrive pas à comprendre d’où viens mon erreur.

    J'ai un "QtGui.QLineEdit" qui se nome self.scTxtVER.text() avec comme valeur par défaut : v001
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    self.scTxtVER.setText(_translate("MainWindow", "v001", None))
    J'aimerai via un bouton faire une incrémentation : v001, v002, v003 ... sauf que il y a un lettre la dedans et c'est là que tout ce complique.
    J'ai donc séparé le "v" via split() et j'ai donc maintenant 001 quand je fait un print.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    sverUP = self.scTxtVER.text()
    Version = "v"
            for subV in sverUP.split(Version):
            print subV
    Sauf que je ne peut pas lui rajouter un +1 pour l'incrémentation sans quoi il me retourne une erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    unsupported operand type(s) for +: 'QString' and 'int'
    Cette erreur veut dire que "v" n'est pas compris comme un nombre ?

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    J'ai donc séparé le "v" via split() et j'ai donc maintenant 001 quand je fait un print.
    Plus simple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    numbers = sverUP.lstrip('v') # '001'
    Dans ce cas l'entier apparaîtra à l'aide de la fonction int

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    n = int(numbers) # 1
    n += 1 # 2
    il suffit de faire de la concaténation de chaînes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    version = 'v' + str(n).zfill(3) # 'v002'
    J'espère avoir bien compris ce que tu veux. Après on peut utiliser le formatage de chaîne plus élaboré, si ça dépasse un plus grand nombre de boutons...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    Hello,
    Je ne connaissais pas "'lstrip", merci !

    Alors j'ai fait un vulgaire copier/coller et j'ai une erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    AttributeError: 'QString' object has no attribute 'lstrip'
    kezako ?!

  4. #4
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    Trouvé, finalement j'ai re-forcé la str avec "sverUP = str(sverUP)". Je ne sais pas si c'est bien ou pas, en tout cas ça fonctionne.
    Apparemment c'est normal, car il n'y a pas de strip dans QString. Mais il existe un trimmed()
    Voila, voila.

  5. #5
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    Alors, ça fonctionne très bien fred1599. Cependant j'ai qu'une seul incrémentation.
    CàD, j'ai v001 quand je clic ça me retourne v002, mais au troisième clic je n'ai pas de v003. Il reste bloqué à v002 ?

  6. #6
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    OK, j'ai capter le truc
    J'ai repris la valeur de "QtGui.QLineEdit" qui se nome self.scTxtVER.text().
    Puis fait un .setText avec la nouvelle var "Version" et à chaque pression du bouton ça me fait la MàJ.
    au cas ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
            numbers = sverUP.lstrip("v")
            n = int(numbers)
            n += 1
            version = "v" + str(n).zfill(3)
            self.scTxtVER.setText(_translate("MainWindow", version, None))
            sverUPadd = self.scTxtVER.text()
            print(sverUPadd)
    Merci encore, fred1599 !

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

    C'est un détail, mais dans un cas pareil tu peux supprimer le "_translate()".

  8. #8
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    Effectivement il ne sert à rien dans ce cas présent,
    merci.

  9. #9
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 813
    Points : 7 102
    Points
    7 102
    Par défaut
    AttributeError: 'QString' object has no attribute 'lstrip'
    Normal un QString est différent d'un objet str en python 2.x, du coup ta transformation est justifiée

    Par contre en version 3.x, ma proposition sera 100% correcte...

    OK, j'ai capter le truc
    J'ai repris la valeur de "QtGui.QLineEdit" qui se nome self.scTxtVER.text().
    Puis fait un .setText avec la nouvelle var "Version" et à chaque pression du bouton ça me fait la MàJ.
    Content que ça fonctionne pour toi, mais je ne sais pas si c'est fait, as-tu bien créer une fonction pour incrémenter ta version lors de chaque appui sur ton bouton ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  10. #10
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    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 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Un petit détail quand même...

    Citation Envoyé par Miaz3 Voir le message
    J'aimerai via un bouton faire une incrémentation : v001, v002, v003 ... sauf que il y a un lettre la dedans et c'est là que tout ce complique.
    J'ai donc séparé le "v" via split() et j'ai donc maintenant 001 quand je fait un print.
    Ce qui s'affiche ('v001', 'v002', ...) est la représentation d'une information, ici un numéro de version qui est à priori un entier.
    S'il n'est pas saisi par l'utilisateur, quel intérêt d'aller le lire pour le calculer? Vous pourriez en stocker la valeur dans un attribut d'instance (self._version), incrémenté à chaque action sur le bouton et réactualisé côté affichage (sa représentation pour l'utilisateur). çà fait moins de lignes à écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
             self._version += 1
             self.scTxtVER.setText('%03d' % self._version)
    Et aussi moins de lignes à ré-écrire si vous deviez changer ce format.

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

  11. #11
    Membre du Club
    Homme Profil pro
    Compositing / Pipeline
    Inscrit en
    Novembre 2011
    Messages
    63
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Compositing / Pipeline
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Novembre 2011
    Messages : 63
    Points : 45
    Points
    45
    Par défaut
    S'il n'est pas saisi par l'utilisateur, quel intérêt d'aller le lire pour le calculer?
    Ça permet surtout à l'utilisateur d'avoir un retour visuel quand il clic sur "Version +" mais je peux me tromper ?!

    En tous cas j'en prend note et "essayerais" de cleaner tout ce code

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

Discussions similaires

  1. Conversion de QString en INT, UINT, etc.
    Par Sangfeust dans le forum Qt
    Réponses: 10
    Dernier message: 17/09/2014, 16h02
  2. conversion d'un varchar en int pour incrémentation
    Par Nikimizi dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 13/02/2014, 15h19
  3. Incrémentation champ ID de type int
    Par fred_vannes56 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 16/09/2010, 13h59
  4. Post incrémentation?
    Par Defrag dans le forum C
    Réponses: 4
    Dernier message: 08/10/2002, 10h36

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