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 :

Utilisation d'un treeview [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut Utilisation d'un treeview
    Bonjour à tous,

    Dans le cadre d'un projet d'automatisation comprenant différents modules, je rencontre des difficultés quant à la manipulation de l'objet treeview.
    Je fais appel à vos avis et vos conseils.

    Objectifs :
    1. récupérer dans un fichier la liste des capteurs existants et les afficher sous forme de tableau.
    2. parcourir d'autres fichiers afin de connaitre le statut du capteur.

    Objectif 1 :
    Atteint. Les données sont bien récupérées et affichées sous le format souhaité.
    Note : C'est un bouton qui déclenche l'action, il n'est pas dans le code présenté ci-dessous.

    Objectif 2 :
    En cliquant sur un autre bouton, je souhaite récupérer les noms des capteurs qui sont affichés dans le treeview.
    Ces noms seront utilisés comme mot-clé dans les recherches effectuées dans d'autres fichiers.
    Les recherches permettront d'obtenir le statut du capteur :

    • n'existe pas (capteur pas trouvé)
    • actif (capteur trouvé, actif)
    • inactif (capteur trouvé, inactif)


    Les questions :
    - Je n'arrive pas à obtenir l'information dont j'ai besoin à savoir juste le nom du capteur. Comment procéder ?
    - Est-ce une erreur d'utiliser le treeview comme conteneur d'information ?

    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
    import tkinter as tk
    from tkinter import ttk
     
    root = tk.Tk()
    root.title('Capteurs')
    root.geometry('600x200')
     
    # columns
    columns = ('#1', '#2', '#3')
     
    tree = ttk.Treeview(root, columns=columns, show='headings')
     
    # define headings
    tree.heading('#1', text='Name')
    tree.heading('#2', text='Type')
    tree.heading('#3', text='Statut')
     
    # generate sample data
    capteur_list = []
    for n in range(1, 7):
        capteur_list.append((f'capteur_name {n}', f'capteur_type {n}', f' '))
     
    # adding data to the treeview
    for capteur in capteur_list:
        tree.insert('', tk.END, values=capteur)
     
    tree.grid(row=0, column=0, sticky='nsew')
     
    # run the app
    root.mainloop()

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

    Citation Envoyé par Vorillyan Voir le message
    Les questions :
    - Je n'arrive pas à obtenir l'information dont j'ai besoin à savoir juste le nom du capteur. Comment procéder ?
    - Est-ce une erreur d'utiliser le treeview comme conteneur d'information ?
    Le treeview est un widget. Il présente des données et permet à l'utilisateur d'interagir avec (déclencher un évènement - appeler une fonction - lorsque l'utilisateur sélectionne une ou plusieurs lignes).

    Un "conteneur" d'information sera plutôt une composition de listes et de dictionnaires: une mise en forme des données "pratique" pour les opérations à effectuer. Cette représentation est souvent indépendante de leur présentation - plutôt orientée interactions avec l'utilisateur -).

    Tout çà pour dire que si vous avez un problème précis avec les treeview, il serait bon de l'exposer clairement et de montrer ce que vous avez essayé de faire pour le résoudre.

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

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonjour wiztricks,

    Merci pour la réponse.
    Le résultat que je cherche à obtenir :

    • Cliquer pour un bouton pour sélectionner un fichier.
      Note : Réalisé

    • Afficher les éléments récupérés dans le fichier sous forme d'un tableau dans une fenêtre.
      Note : Réalisé en utilisant un treeview. L'affichage obtenu est bien celui souhaité avec différentes colonnes.

    • Récupérer les informations affichées dans le treeview pour lancer une recherche par mot clé et mettre à jour une colonne du treview.
      Note : En reprenant l'exemple, je cherche à récupérer les valeurs situées dans la colonne Name : Capteur_name *
      Note : En essayant

      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      capteur_tree = tree.get_children()
      print(capteur_tree)
      j'obtiens ('I001', 'I002', 'I003', 'I004', 'I005', 'I006') mais ce n'est pas encore Capteur_name *.

  4. #4
    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
    Citation Envoyé par Vorillyan Voir le message
    En essayant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    capteur_tree = tree.get_children()
    print(capteur_tree)
    j'obtiens ('I001', 'I002', 'I003', 'I004', 'I005', 'I006') mais ce n'est pas encore Capteur_name *.
    Ce sont les identifiants crées automatiquement (par défaut) lors de chaque .insert.

    Après vous pouvez récupérer le tuple associé via la méthode .item avec l'identifiant en paramètre. Ca retourne un dictionnaire où la clef qui vous intéresse pour récupérer "la ligne" sera "values".

    Ca retourne un tuple où on peut récupérer ce qui correspond à l'indice de la colonne souhaitée.

    Compliqué pour aller chercher des informations que vous avez déjà...

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

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2006
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 29
    Points : 18
    Points
    18
    Par défaut
    Bonjour wiztricks,

    Citation Envoyé par wiztricks Voir le message
    Compliqué pour aller chercher des informations que vous avez déjà...
    Effectivement, j'avais perdu de vue cet aspect, il y a une solution plus simple et plus élégante au moment de l'alimentation du treeview.
    Merci de m'avoir réorienté.

    Sujet résolu.

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

Discussions similaires

  1. Réponses: 0
    Dernier message: 09/11/2010, 15h47
  2. [AC-2003] Utilisation d'un treeview TreeCtrl
    Par lio33 dans le forum IHM
    Réponses: 2
    Dernier message: 10/02/2010, 09h51
  3. Réponses: 4
    Dernier message: 01/08/2009, 17h44
  4. Utilisation d'un treeView
    Par Yann_br dans le forum ASP.NET
    Réponses: 10
    Dernier message: 11/10/2007, 14h38
  5. Utilisation d'un treeview
    Par t0ine dans le forum C++Builder
    Réponses: 3
    Dernier message: 05/02/2006, 09h11

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