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 :

Python 3.9.1 : Tkinter – Treeview : Simple clic – aucun item retourné et/ou antépénultième remonté [Python 3.X]


Sujet :

Tkinter Python

  1. #1
    Invité
    Invité(e)
    Par défaut Python 3.9.1 : Tkinter – Treeview : Simple clic – aucun item retourné et/ou antépénultième remonté
    Bonjour,

    Afin d’illustrer le problème que je rencontre, j’ai utilisé un exemple de treewview en y insérant la détection du simple clique et du double clic.

    Le but étant d’afficher le nom de la personne de la ligne sélectionnée par un simple ou double clic

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
     
    from tkinter import *
    from tkinter import ttk
     
     
     
    Debug = 1
     
    def SimpleClick_Treeview(event):
        if Debug ==1 : print('SimpleClick_Treeview')
     
        # Acquisition de l'indicatif selectionné par le click de souris
        item = tree.item(tree.selection())['values']
        if Debug ==1 : print ("Element selectionne : ",item)
     
        Nom=item[1]
        Centre = Label (root , text = Nom , bg="black" , fg="white" , font="broadway 18 bold " )
        Centre.place(x=10,y=10, width=400)
     
     
     
    def DoubleClick_Treeview(event):
        if Debug ==1 : print('DoubleClick_Treeview')
     
        # Acquisition de l'indicatif selectionné par le click de souris
        item = tree.item(tree.selection())['values']
        if Debug ==1 : print ("Element selectionne : ",item)
     
        Nom=item[1]
        Centre = Label (root , text = Nom , bg="black" , fg="white" , font="broadway 18 bold " )
        Centre.place(x=10,y=10, width=400)
     
     
     
    Nom=''
     
    root=Tk()
    root.geometry( "500x200" )
     
     
    Centre = Label (root , text = Nom , bg="black" , fg="white" , font="broadway 18 bold " )
    Centre.place(x=10,y=10, width=400)
     
     
     
    # === Création de l " objet Treeview ===
     
    tree=ttk.Treeview( root , columns = (1 ,2 ,3 ,4) , height = 5 ,show = "headings" )
    tree.place(x=50,y=50, width=400)
     
    tree.column(1 , width = 20)
    tree.column(2 , width = 70)
    tree.column(3 , width = 150)
    tree.column(4 ,width=50)
     
    # === Création de l " entête ===
    tree.heading(1 , text="ID" )
    tree.heading(2 , text="Nom" )
    tree.heading(3 , text="Email" )
    tree.heading(4 , text="Age" )
     
    # === Insertion des données ===
    tree.insert( "" , "end" , values = (1 , "Albert " , "albert@gmail.com" ,27) )
    tree.insert( "" , "end" , values = (1 , "Majid" , "majid@gmail.com" ,33) )
    tree.insert( "" , "end" , values = (1 , " Natalie " , "natalie@gmail.com" ,21) )
     
    tree.bind("<Double-1>", DoubleClick_Treeview)
    tree.bind("<Button-1>", SimpleClick_Treeview)
     
     
    root .mainloop ()
    Le problème est le suivant :
    Lorsque je clique simple pour la première fois dans le treeview aucun nom n’est sélectionné.(erreur)
    Si je double clique : le nom est bien affiché.
    Si je clique simple : le nom précédent est affiché au lieu du nom sélectionné
    Si je clique simple + clique simple (en patientant un peu) : le nom est bien affiché

    Pourriez-vous m’indiquer mon erreur, comment la corriger (sélection sur simple clic) ?
    Merci par avance pour vos commentaires et remarques.
    Christian.

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

    Normalement, l'évènement virtuel <<TreeviewSelect>> est défini pour çà.
    Pour votre problème, réalisez que les évènements que vous avez déclarés seront pris en compte avant leur prise en compte par la mécanique du widget(*). Et que vous allez toujours avoir un temps de retard à le faire comme çà.

    (*) si çà vous intéresse, c'est géré par les bindtags. Si vous voulez que votre code fonctionne, il faudrait que le traitement "widget" se fasse "avant" et donc changer l'ordre dans ce bindtags.

    - W

  3. #3
    Invité
    Invité(e)
    Par défaut Problème résolu - Merci pour les informations.
    Bonjour,

    L'utilisation de TreeviewSelect a résolu le problème.

    Merci pour les informations.

    Bonne fin de journée.

    Christian

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    tree.bind('<<TreeviewSelect>>', on_select)
     
    def on_select (event):
    item = tree.item(event.widget.selection())['values']
    Dernière modification par Invité ; 14/02/2021 à 20h01. Motif: Ajout des balises [CODE] mon code [/CODE] (bouton #)

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/09/2009, 19h25
  2. Comment valider un items de Treeview par clic droit?
    Par Mickey.jet dans le forum Delphi
    Réponses: 8
    Dernier message: 10/05/2007, 18h23
  3. [JTable] Détection de simple clic et de double clic
    Par Core8 dans le forum Composants
    Réponses: 7
    Dernier message: 22/12/2006, 14h44
  4. Réponses: 1
    Dernier message: 16/01/2006, 18h36

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