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

Calcul scientifique Python Discussion :

Probleme d'affichage d'un tableau avec Tkinter


Sujet :

Calcul scientifique Python

  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Probleme d'affichage d'un tableau avec Tkinter
    Bonjour à tous,

    Voici un petit programme de mon invention, qui vise à m'entrainer et à apprendre à créer des tableaux avec Tkinter.
    Comme je suis chimiste de formation, j'ai pris un exemple dans le domaine de la chimie: on rentre dans le terminal, des valeurs de "volume" et de "pH" (dosage, pour ceux qui connaissent).
    Le but est seulement d'afficher chaque mesure entrée par l'utilisateur dans un tableau avec 3 colonnes : Mesures, Volume et pH.

    La saisie des valeurs se fait correctement. J'ai pu vérifier cela en imprimant les 3 listes (mesures, volume, et pH) dans le terminal de python 3.0.
    Mais l'affichage du tableau pose problème : python renvoie le message d'erreur ci-dessous et j'ai beau regarder mon script, je ne trouve pas l'erreur.
    Pourquoi Python affiche un message d'erreur "out of range" et comment corriger cela?
    Merci de m'aider pour ceux qui le peuvent. Etre autodidacte, c'est pas toujours facile...

    Voici mon script et le message d'erreur:

    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
    32
    33
    34
    35
    36
    37
    38
    from tkinter import *
     
    liste_mesure = []
    liste_volumes = []
    liste_pH = []
    saisie = 1
    volume = 0
     
    while volume>=0:
        print("Mesure N°", saisie,":")
        volume=float(input("Entrez le volume :"))
        if volume<0:
            break
        pH = float(input("Entrez le pH : "))
        liste_volumes.append(volume)
        liste_pH.append(pH)
        liste_mesure.append(saisie)
        saisie=saisie+1
     
     
     
    r = 0
    Label(text="Mesure N°", relief=RIDGE, width=25).grid(row=0, column=0)
    Label(text="Volume (en mL", relief=RIDGE, width=25).grid(row=0, column=1)
    Label(text="pH", relief=RIDGE, width=25).grid(row=0, column=2)
     
    #print(liste_mesure)
    #print(liste_volumes)
    #print(liste_pH)
     
     
    for nombre_lignes in range(saisie):
        Label(text=liste_mesure[r], relief=RIDGE, width=25).grid(row=r+1, column=0)
        Label(text=liste_volumes[r], relief=RIDGE, width=25).grid(row=r+1, column=1)
        Label(text=liste_pH[r], relief=RIDGE, width=25).grid(row=r+1, column=2)
        r=r+1
     
    mainloop()
    Images attachées Images attachées  

  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 776
    Points
    36 776
    Par défaut
    Salut,

    Citation Envoyé par Olivier20000 Voir le message
    Merci de m'aider pour ceux qui le peuvent. Etre autodidacte, c'est pas toujours facile...
    IndexError signale juste que l'index r que vous utilisez pour accéder aux éléments de la liste liste_mesure est plus grand que la taille de la liste.
    Pourquoi ne pas écrire: for r in range(len(liste_mesure)):?

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

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Merci, ça marche !
    Bonjour,

    Merci beaucoup. Votre méthode fonctionne, et a résolu mon problème, mais cependant, je ne comprends pas pourquoi ma méthode ne marche pas.

    Prenons un exemple:
    Supposons que l'utilisateur a fait 5 saisies de valeurs.
    La variable "Saisie" prend alors la valeur 5.

    La boucle "for nombre_lignes in range(saisie):" va donc s'exécuter 5 fois, ce qui devrait donc me donner les 5 lignes du tableau pour chaque couple de valeurs.
    A la ligne suivante:
    "Label(text=liste_mesure[r], relief=RIDGE, width=25).grid(row=r+1, column=0)", comme j'ai au préalable initialisé la constante "r" à 0, la valeur liste_mesure[0] devrait s'afficher dans la ligne (0+1=1) du tableau et la colonne 0.

    Même raisonnement pour les 2 lignes suivantes avec l'affichage du Volume et du pH. Et cela 5 fois de suite, "r" prenant les valeurs de 1 à 5.
    Je ne vois pas où l'indice "r" devient plus grand que la taille de la liste.

    Merci de votre aide et de votre patience avec les débutants.


    Citation Envoyé par wiztricks Voir le message
    Salut,



    IndexError signale juste que l'index r que vous utilisez pour accéder aux éléments de la liste liste_mesure est plus grand que la taille de la liste.
    Pourquoi ne pas écrire: for r in range(len(liste_mesure)):?

    - W

  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 776
    Points
    36 776
    Par défaut
    Citation Envoyé par Olivier20000 Voir le message
    cependant, je ne comprends pas pourquoi ma méthode ne marche pas.

    Prenons un exemple:
    Supposons que l'utilisateur a fait 5 saisies de valeurs.
    La variable "Saisie" prend alors la valeur 5.
    La commande magique "print" doit être utilisée pour répondre vous même à ces questions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    print(saisie)
    print(len(liste_mesure))
    for nombre_lignes in range(saisie):
          print (r)
          ...
    Si Python vous dit IndexError, c'est que votre raisonnement est faux: ce qui est instructif c'est pas que je vous explique mais de poser les questions directement à votre code pour vérifier que vos hypothèses sont bien satisfaites. Ca s'appelle la mise au point.

    Après si vous ne voulez pas devenir fou éviter d'écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    for nombre_lignes in range(saisie):
        Label(text=liste_mesure[r], relief=RIDGE, width=25).grid(row=r+1, column=0)
     ...
        r=r+1
    préférez-y:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for r in range(saisie):
        Label(text=liste_mesure[r], relief=RIDGE, width=25).grid(row=r+1, column=0)
     ...
    une fois que vous aurez compris pourquoi saisie est différent de len(liste_mesure).

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

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Février 2019
    Messages
    67
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Février 2019
    Messages : 67
    Points : 42
    Points
    42
    Par défaut Merci pour ces explications / pb avec fenêtre tkinter
    Re-bonjour,

    merci pour ces explications et ces scripts que je vais tester tout de suite...

    Maintenant je suis embêté avec ma fenêtre tkinter...
    La fenêtre tkinter qui contient le tableau de mesures s'affiche correctement, mais pour quelle reste visible sur l'écran, j'utilise l'instruction mainloop().
    Le problème c'est que tant que je n'ai pas fermé la fenêtre, le programme ne poursuit plus son execution dans le terminal.
    J'ai rédigé quelques lignes de script supplémentaires qui demandent à l'utilisateur s'il souhaite modifier des mesures, et si oui, lesquelles.
    Mais cette condition ne s'affiche dans le terminal, que si je ferme la fenêtre.
    Or je voudrai que la fenêtre reste ouverte, et avoir la main sur le terminal pour que le programme se poursuive.

    Savez-vous s'il existe une instruction spécifique pour cela ou suis-je obligé de fermer la fenêtre?

    Merci, et bonne soirée.

  6. #6
    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 776
    Points
    36 776
    Par défaut
    Salut,

    Si vous écrivez une application avec une interface graphique, il faut peut être(*) oublier la "console" (là où s'affiche "print" et où sont saisies les entrées via "input") et utiliser des Widgets de saisies comme Entry, Text, ... et autre Buttons pour organiser un dialogue avec l'utilisateur.
    ET programmer avec une interface graphique c'est pas quelques "trucs", c'est un type de programmation très différent qui mérite d'ouvrir un tuto. pour apprendre les bases et se familiariser avec la documentation des différents widgets pour faire un peu plus que les trucs basiques.

    (*) parce que gérer les deux à la fois, c'est de la programmation dite avancée.

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

Discussions similaires

  1. [MySQL] probleme affichage dans un tableau avec double requetes
    Par roy-mustang dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 25/05/2009, 09h25
  2. Problème d'affichage d'un tableau
    Par Sid ali dans le forum Langage
    Réponses: 14
    Dernier message: 28/02/2006, 00h24
  3. Problème d'affichage d'un sprite avec SDL
    Par youp_db dans le forum SDL
    Réponses: 1
    Dernier message: 11/02/2006, 18h08
  4. Réponses: 15
    Dernier message: 15/11/2005, 17h33
  5. xml-xsl-fo : probleme d'affichage d'un tableau
    Par clindoeil dans le forum XSL/XSLT/XPATH
    Réponses: 5
    Dernier message: 12/12/2003, 12h46

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