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

Tkinter Python Discussion :

enregistrement de plusieurs paramètre avec le widget text


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut enregistrement de plusieurs paramètre avec le widget text
    Salut à tous,

    j'essaye de faire une petite interface graphique très facile d'utilisation.
    MAis mon programme à besoin de nombreux paramètres précis ( 11 paramètre à 18 chiffres après la virgule ...)
    Comme c'est pénible de taper chaque parametre dans une petite boite, je pensait faire une grosse boite de dialogue ou on peut copier coller tout les paramètres d'un coup :
    En gros, ça donnerai :

    0.00000000000E000
    1.00000000000E000
    ...

    Jusque là tout va bien, mais le problème, c'est que j'aimerai récupérer chaque ligne de cette boite de dialogue et associer chaque valeur à un paramètre :
    paramètre1=ligne1
    ...
    Et là, c'est la déroute .... je n'arrive pas du tout à le faire ... Voici ce que j'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    parametres=[]
    for k in range(10):
    		a=str(k)+".0"
    		b=str(k)+".25"
    		parametres[k:k]=float(parametre_entree.get(a,b))
    Et rien ne marche : il ne selectionne pas une ligne mais un caractère et il n'arrive pas à transformer les caractère en float ... :/

    Merci d'avance de votre aide

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

    La suite (a, b) est de la forme ('0.0', '0.25'), ('1.0, '1.25'), (2...
    Outre que la ligne 0 n'existe pas, vous pourriez écrire:
    ('1.0, '1.0 lineend'), ('2.0', '2.0 lineend')
    Ca supporte mieux les changements dans la longueur de la ligne.
    Après il faut voir le code, car le truc de base touillé sur un coin de table n'a pas de problème - çà ne veut pas dire qu'il n'y en a pas, jusque que sans plus d'informations, çà va pas être "facile" à débrouiller.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> for x in range(10): txt.insert('end', '%d.10\n' % x)
    ...
    >>> s = txt.get(2.0, '2.0 lineend')
    >>> s
    u'1.10'
    >>> z = float(s)
    >>> z
    1.1
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    merci pour ta réponse.
    Quand je fait comme toi ça marche aussi, mais quand j'essaye de le mettre dans la boucle ça ne marche pas ...

    voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    from tkinter import *
     
    parametres=[0.0]*12
     
    def acquisition():
    	global parametre_entree,parametres
    	for k in range(10):
    		a=str(k+1)+".0"
    		print(a)
    		b=str(k+1)+".25"
    		print(b)
    		parametres[k]=float(parametre_entree.get(a,a+'lineend'))
     
    # ----- Programme principale ----
    fen1=Tk()
    fen1.title("Calcul des niveaux d’énergies")
     
    # création des widgets esclaves :
     
    parametre_entree= Text(fen1)
    parametre_entree.insert(INSERT,"Rentrer les valeurs des paramètres")
    parametre_entree.pack()
     
     
    Button(fen1,text='Quitter',command=fen1.quit).pack()
     
    Button(fen1,text="Acquisition des paramètres",command=acquisition).pack()
     
     
    fen1.mainloop()

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

    Examinons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	for k in range(10):
    		a=str(k+1)+".0"
    la première ligne contient "Acquisition des paramètres": çà ne va pas le faire!!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		print(a)
    		b=str(k+1)+".25"
    		print(b)
    		parametres[k]=float(parametre_entree.get(a,a+'lineend'))
    problème: même si l'utilisateur est "gentil", il ne va pas forcément entrer 10 valeurs. Dans ce cas, le .get récupère un string "vide" et float n'aime pas!!!
    Il serait plus judicieux d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                a = "%d.0" % (k + 2)
                v = widget.get(a,a+'lineend')
                if not v:
                    break
                print ('a: %s, v: %s' % (a, v))
                table[k]=float(v)
    1 => On saute la première ligne,
    2 => On arrête à la première ligne vide

    Pour le reste tout dépend de l'aide qu'on souhaite donner aux utilisateurs pour la saisie faut-il:
    • tester que v est bien un float?
    • marquer la ligne en erreur?
    • ...


    Le widget text est peut être un peu trop "ouvert" pour "fermer" tous les cas possibles: une "Entry" sera peut être plus simple à gérer.

    Comme il est fort probable que vous allez sauvegarder les informations dans un fichier, pourquoi ne pas saisir les informations dans un tableur, de convertir le fichier en .csv et de lier le .csv...

    Vous avez un code +complet en ficher joint.
    - W
    Fichiers attachés Fichiers attachés
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    merci pour cette réponse.

    Je n'ai pas encore eu le temps de bien tout digérer vos conseil, mais je vais le faire tout de suite après.
    J'ai oublié de dire à quoi servait ce programme :
    en fait, c'est une "conversion" entre deux programme. J'ai un programme qui fit des données et me sort 11 paramètres.
    Après, j'injecte ces 11 paramètre pour calculer une suite théorique avec un autre programme. Ce sont tous des programme qui ne prennent en entrée que des tableau en .dat.
    Mon idée était alors la suivante :
    Le premier programme sort les paramètres (plus quelques trucs)
    l'utilisateur selectionne les paramètres, les copie et les colle dans ma grosse fenêtre text
    mon petit programme fait le petit calcul qu'il faut et écrit tout ça dans un .dat qui à le bon format.

    Je voulais faire quelque chose de pratique et qui aille vite. (c'est pour ça que j'ai voulu faire comme ça et pas 11 Entry)

    Et c'est aussi pour ça que je n'ai mis aucune "securité" ou verification de ce que l'utilisateur mettait. C'est plus à usage personnel.

    Je lis en détail vos remarque, cotre code, j'essaye de l'appliquer et je vous dit si ça marche

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2004
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2004
    Messages : 13
    Points : 10
    Points
    10
    Par défaut
    je viens de lire et d'essayer d'appliquer.

    ça marche très bien et je vois que ma façon de coder est quelque peu rustique ^^

    merci beaucoup pour ton aide

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 781
    Points
    36 781
    Par défaut
    Citation Envoyé par Sailx Voir le message
    ...
    Ce sont tous des programme qui ne prennent en entrée que des tableau en .dat.
    Mon idée était alors la suivante :
    Le premier programme sort les paramètres (plus quelques trucs)
    l'utilisateur selectionne les paramètres, les copie et les colle dans ma grosse fenêtre text
    Pourquoi ne pas lire et afficher le .DAT (dans le text widget) plutôt que d'ouvrir le .DAT et faire un cut&paste dans le Text widget?

    Je voulais faire quelque chose de pratique et qui aille vite. (c'est pour ça que j'ai voulu faire comme ça et pas 11 Entry)
    Hu?!? Faire une boucle for ... pour créer les 11 Entry, voilà le genre de répétitions avec un brin de variation que les ordinateurs adorent!!

    Je n'ai pas trop réfléchit à la question mais "cut&paste" dans un widget Text est certes plus simple que de faire:
    • ".getlines" pour avoir une liste de n lignes,
    • affecter la nième ligne à la nième entry,

    Mais il ne faut pas exagérer non plus.

    Si vous lisez directement le fichier plutôt que de passer par cut&paste, il n'y a pas trop de différence: pour modifier un truc, il faudra pointer la souris dessus et clavarder la chose.

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

Discussions similaires

  1. [ZF 1.11] Plusieurs paramètre avec Zend_Controller_Router_Route_Regex
    Par absot dans le forum Zend Framework
    Réponses: 7
    Dernier message: 09/08/2012, 10h37
  2. CR XI : Renseigner plusieurs paramètres avec une seule valeur
    Par jpamy dans le forum SAP Crystal Reports
    Réponses: 0
    Dernier message: 30/01/2009, 14h22
  3. Scrollbare avec un widget Text
    Par panthere_noire dans le forum Tkinter
    Réponses: 8
    Dernier message: 26/09/2008, 14h33
  4. undo avec un widget Text
    Par will97 dans le forum Tkinter
    Réponses: 9
    Dernier message: 05/06/2007, 20h52
  5. Réponses: 2
    Dernier message: 12/09/2005, 15h33

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