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 :

Afficher un float dans un QLineEdit en formattant l'affichage [QtGui]


Sujet :

PyQt Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Par défaut Afficher un float dans un QLineEdit en formattant l'affichage
    Bonjour,

    Je démarre la découverte de PySide (1.1.2) avec Python (2.7) et je souhaiterais représenter un float dans un QLineEdit mais en n'affichant qu'un nombre prédéterminé de chiffres après la virgule ( je fais des calculs avec cette valeur mais je ne veux pas alourdir l'affichage).
    J'ai essayé plusieurs méthodes :
    setInputMask, mais la méthode est assez contraignante puisqu'elle limite le nombre de caractère
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            self.setInputMask("000.0")
    J'ai essayé d'utiliser un QSpinBox mais là aussi j'ai 2 contraintes : il faut également déterminer une valeur Maximale et d'autre part je voudrais supprimer les flèches "up" et "down" ce que je ne sais pas faire !

    Quelle est la meilleure solution à mettre en oeuvre ?
    Je vous remercie d'avance

  2. #2
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Hello,

    Tu peux formater une chaîne de caractères (nombres) de cette manière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    a = 3.52358
    b = "%.2f" % a
    Je t'invite à lire cette page, mais avant tout d'apprendre les bases de Python avant de chercher une solution dans un binding.

    Même si tu vas avoir l'impression de perdre du temps, je te promets que ça ne sera pas le cas.

    J
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  3. #3
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Par défaut
    Bonjour Jiyuu,

    Merci pour ta réponse ultra rapide
    En fait j'ai démarré la découverte de Python et de Pyside il y a déjà quelques semaines et je me mange les doigts de n'avoir pas fait cette "rencontre" plus tôt ... Je suis effectivement encore loin d'avoir tout lu et tout compris mais ce "chemin" est néanmoins plein de satisfactions.
    J'ai déjà regardé le formatage de données et c'est justement là mon problème d'aujourd'hui : comment obtenir le même rendu pour le formatage (en affichage) d'un QLineEdit ? Il me manque peut-être quelques "truc" au niveau de la syntaxe de QInputMask.
    Je suis en train de chercher également vers les "feuilles de style" sans résultat pour l'instant.
    Je pensais également "farfouiller" vers les "delegate" (que j'utilise par ailleurs ...) mais puis-je l'utiliser dans le cas d'un widget isolé qui n'est pas relié à une vue ??
    Beaucoup de questions, quelques pistes mais pas encore de solutions ...

    Je te remercie pour tes "lumières"
    @+

  4. #4
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Pour reprendre le problème au départ, quand tu dis :
    je souhaiterais représenter un float dans un QLineEdit
    tu entends et veux faire quoi exactement ?
    Un calcul est fait et tu l'envoies dans un QLineEdit ?
    Tu ne veux pas que l'affichage de la valeur (renseignée automatiquement ou manuellement) ai plus de X chiffres après la virgule ?
    Tu veux vraiment que l'utilisateur puisse remodifier la valeur du widget ? (peut-être utiliser un QLabel ?)

    J'ai l'impression que c'est plutôt la deuxième question.

    Une piste serait peut-être d'intercepter le fait que le QLineEdit perde le focus (signal) et y associer une fonction (slot) qui reformate sa valeur.

    Tu peux t'inspirer de ce tutoriel.
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

  5. #5
    Membre éclairé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Octobre 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 330
    Par défaut
    Je fais décrire un peu plus précisément le contexte :
    J'ai une liste de produits avec lesquels je souhaite établir une formule de mélange :
    Produit A : 100
    Produit B : 200
    Produit C : 300

    L'application va calculer la somme de ces produits (100 + 200 + 300) : 600 que je place dans le QLineEdit (affichage sans décimales). L'application détermine également les pourcentages respectifs de chacun des composants =>

    Produit A : 0,16 %
    Produit B : 0,32 %
    Produit C : 0,48 %

    Les pourcentages sont également arrondis (à l'affichage uniquement) et l'ensemble de ces données sont dans une QTableView adossée à une base SQlite.

    Ce que je souhaite également pouvoir faire :

    1 - Modifier les pourcentages des produits (en respectant la somme des % = 100% bien sûr ) et redéterminer les poids respectifs des composants en prenant comme somme totale la valeur du QLineEdit (la valeur du QLineEdit est prise alors comme paramètre d'entrée du calcul ainsi que les pourcentages modifiés)

    2 - Modifier la valeur totale du mélange (passer d'un mélange de 600 à 1000) et recalculer la valeur de chacun des composants en respectant les proportions affichées(la valeur du QLineEdit et les pourcentages sont alors les valeurs d'entrées du calcul)

    Le QLineEdit est donc utilisé à la fois en affichage mais aussi en interface de saisie.
    J'arrive à faire fonctionner le code comme souhaité il me manque que le formatage d'affichage de la somme des composants ..

    J'espère que mon explication est claire (?), sinon je veux apporter des compléments.

    Merci pour vos idées.
    @+

  6. #6
    Rédacteur/Modérateur

    Avatar de Jiyuu
    Homme Profil pro
    Développeur amateur
    Inscrit en
    Janvier 2007
    Messages
    2 456
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur amateur
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 456
    Billets dans le blog
    15
    Par défaut
    Tu as déjà pondu un bout de code ?

    Si oui, tu pourrais nous le mettre (sauf la partie QTableView et Sql car je ne pense pas que ton souci soit là).

    Si non, je crois vraiment que la solution réside dans l'interception des signaux de pertes de focus et modifications des valeurs des widgets.

    Pour ma part, je ferai ainsi :
    Après l'intervention manuelle de l'utilisateur, la perte de focus du QWidget reformate de la chaîne de caractère de celui-ci.
    Le changement de texte d'un QWidget génère un recalcule des valeurs des QWidgets.

    Signaux possibles pour le focus :
    http://qt.developpez.com/doc/4.7/qwidget/#focusinevent

    Signal pour le changement de valeur :
    http://qt.developpez.com/doc/4.7/qlineedit/#textchanged
    Initiation à Qt Quick et QML : Partie 1 - Partie 2
    En cas de besoin, pensez à la
    Mon site et mes tutoriaux sur Developpez.com
    Pas de question technique par MP... Les forums sont là pour ça

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

Discussions similaires

  1. formatter/afficher une date dans un text_field
    Par Javix dans le forum Ruby on Rails
    Réponses: 1
    Dernier message: 06/05/2009, 10h28
  2. Afficher un float dans une textBox
    Par thonyyzz dans le forum C++
    Réponses: 6
    Dernier message: 22/04/2008, 09h25
  3. [OLE Excel] formatter ecriture float dans une cellule
    Par netah25 dans le forum C++Builder
    Réponses: 1
    Dernier message: 24/01/2006, 10h09
  4. Comment afficher FLASH directement dans le EMAIL
    Par Bilmagic dans le forum Flash
    Réponses: 3
    Dernier message: 05/06/2003, 00h38
  5. Réponses: 2
    Dernier message: 10/06/2002, 11h03

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