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 :

Problème liste tkinter [Python 3.X]


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Par défaut Problème liste tkinter
    Bonjour je suis face à un problème lors de la création de liste en TKinter.

    Je vous explique, mon objectif est de créer une liste qui va m'afficher automatiquement ligne après ligne les éléments contenus dans une liste python. Personnellement, il s'agit d'une liste enregistrée dans un fichier JSON que j'importe dans mon programme et que je veux afficher graphiquement dans une liste Tkinter.

    Le problème est que j'y arrive pas, j'essaie avec une boucle for mais ça ne donne rien et j'avoue que je sèche pas mal.
    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
    import json
    from tkinter import *
     
    with open('saisie\sauvegarde\liste_patient.json') as mon_fichier:#ouverture du fichier de sauvegarde fauteuil
        liste_patient = json.load(mon_fichier)
     
    patient_liste = liste_patient#chargement de la base de donnée existante
     
    fenetre = Tk()#génère la fenêtre tkinter
     
    fenetre.title("Ergogest")#nomme la fenêtre tkinter
     
    fenetre.geometry("1920x1080")#dimensionne la fenêtre tkinter
     
    liste_p = Listbox(fenetre)
     
    boucle_liste = 1
     
    b = len(patient_liste)
    print("b : ",b)
     
    for g in range(b):
     
        print("Patient : ",g)
        liste_p.insert(g,patient_liste)
     
        liste_p.pack()
     
        fenetre.mainloop()
    Merci de votre aide

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    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 741
    Par défaut
    Salut,
    Citation Envoyé par Goulthard Voir le message
    Le problème est que j'y arrive pas, j'essaie avec une boucle for mais ça ne donne rien et j'avoue que je sèche pas mal.
    En écrivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for g in range(b):
     
        print("Patient : ",g)
        liste_p.insert(g,patient_liste)
     
        liste_p.pack()
     
        fenetre.mainloop()
    vous montrez ne pas trop savoir l'utilité de l'appel à .mainloop (et celui de l'appel à .pack).
    Et il y a des tutos pour vous expliquer tout çà.

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

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Par défaut
    oui je l'avoue,

    j'ai commencé Tkinter hier car je dois créer une interface graphique pour un programme.
    Le problème est que je dois rapidement rendre une version de test de ce programme à un proche et tous les tutos ne donnent pas toutes les informations que je cherche.

    Je sais comment placer mes widgets avec pack mais comme ici ce n'est qu'un programme de test, je n'ai pas grand intérêt à le placer à un endroit précis

  4. #4
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    bonjour,

    en fait pas besoin d'un for

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    liste_p.insert("end", *patient_liste)
    liste_p.pack()
    oui, placer pack et mainloop dans la boucle ...
    je n'ai pas grand intérêt à le placer à un endroit précis
    l'intéret est d'avoir quelque chose qui fonctionne, placer du code hasard a toutes les chances d'amener des erreurs

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2020
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2020
    Messages : 51
    Par défaut
    Merci beaucoup pour votre réponse !!!

    Le code marche, c'est hyper con, je vois toujours trop compliqué

    Je sors de ce pas le pack et la loop de la boucle...

    Bonne journée à vous.

  6. #6
    Expert confirmé Avatar de papajoker
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2013
    Messages
    2 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nièvre (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2013
    Messages : 2 323
    Par défaut
    Citation Envoyé par Goulthard Voir le message
    j'ai commencé Tkinter hier
    je vois toujours trop compliqué
    Désolé mais ton erreur n'avait pas de rapport avec Tkinter, mais plutôt une mauvaise connaissence des listes donc de python en général

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(taille):
        liste_p.insert(i, patient_liste)
    Tu insérais la liste complete dans chaque ligne de ton widget
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(taille):
        liste_p.insert(i, patient_liste[i])
    ici, on insert un seul élément

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 832
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 832
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par Goulthard Voir le message
    patient_liste = liste_patient#chargement de la base de donnée existante
    Tu veux bien m'expliquer l'utilité de cette instruction ???????? Oui, moi aussi quand je vais acheter mon pain je prends les pièces de la poche gauche pour les mettre dans la droite avant de payer. Ca fait chier la boulangère, ça fait chier tous les clients derrière, bref c'est super pratique pour tout le monde.
    Et puis évite des variable comme "b", "g", on a l'impression que tu n'as pas réfléchi à ton code et que tu avances en tatônnant. Ce n'est pas interdit d'écrire b=len(patient_liste) mais ce n'est pas super parlant. Surtout qu'en plus la variable ensuite n'est utilisée qu'une fois.

    Citation Envoyé par papajoker Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i in range(taille):
        liste_p.insert(i, patient_liste[i])
    ici, on insert un seul élément
    Je ne connais pas assez tk pour savoir si c'est possible mais si la listbox autorisait un truc style append on s'éviterait cette indexation (toujours un peu longuette)
    Un truc qui ressemblerait à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for p in patient_liste::
        liste_p.append(p)
    Sinon il y a toujours l'énumération (qui évite au-moins d'avoir à se farcir le calcul de la taille de la liste)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for (i, p) in enumerate(patient_liste):
        liste_p.insert(i, p)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Membre Expert
    Avatar de MPython Alaplancha
    Homme Profil pro
    Paysan à 3 francs six sous
    Inscrit en
    Juin 2018
    Messages
    923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Paysan à 3 francs six sous
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juin 2018
    Messages : 923
    Billets dans le blog
    8
    Par défaut
    Bonjour,
    Citation Envoyé par Sve@r Voir le message

    Je ne connais pas assez tk pour savoir si c'est possible mais si la listbox autorisait un truc style append on s'éviterait cette indexation (toujours un peu longuette)
    On peut très bien se passer de la boucle:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    import tkinter as tk
    root = tk.Tk()
    lbox= tk.Listbox(root)
    lbox.insert(0, *["truc","machin", "chose"])
    lbox.grid()
     
    root.mainloop()
    édit: je n'avais pas vu l'intervention #4 de @papajoker
    Désolé

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

Discussions similaires

  1. [Python 3.X] Problème liste (Python - Tkinter)
    Par KROCLARYS dans le forum Général Python
    Réponses: 17
    Dernier message: 10/05/2018, 19h51
  2. [presque résolu]Probléme liste déroulante
    Par jojo57 dans le forum Access
    Réponses: 5
    Dernier message: 21/04/2006, 11h57
  3. Réponses: 2
    Dernier message: 21/01/2005, 12h55
  4. Problème liste d'affichage
    Par nicolas66 dans le forum OpenGL
    Réponses: 6
    Dernier message: 06/12/2004, 10h10
  5. [JSP]Problème liste deroulante dynamique
    Par besco dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 09/09/2004, 17h58

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