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 :

Auto Focus sur Treeview


Sujet :

Tkinter Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Auto Focus sur Treeview
    Bonjour à tous,

    le but est d'obtenir la surbrillance d'une des lignes affichée par un Treeview (qu'une présélection soit déjà proposée)
    ces deux informations indique qu'il faut passer par iid
    https://www.tfzx.net/index.php/article/7067497.html
    https://stackoverflow.com/questions/...a-row/53152722
    (Renvoie un tuple des valeurs iid des enfants de l'élément spécifié par l'argument élément. S'il est omis, vous obtenez un tuple contenant les valeurs iid des éléments de niveau supérieur. )
    ---> exemple : Rec_list.get_children() ('I001', 'I002', 'I003', 'I004'

    mes essais ne donnent rien
    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
    72
    73
    74
    75
     
    # coding:utf-8
    #version 3.x python
     
    from tkinter import *
    from tkinter.ttk import *
    from tkinter import ttk
     
     
    def Load_Recette_Contenu():
     
        Load_Recette = tk.Toplevel()
        Load_Recette.title("Ouvrit une recette SAF")
        Load_Recette.geometry("325x178+0+0")
        Load_Recette.resizable(width=False, height=False)                                            # Fenêtre verrouillée
        Load_Recette.attributes("-toolwindow", 1)                                                         # Supprime les boutons Réduire/Agrandir
        Load_Recette.attributes("-topmost", 1)                                                             # au premier plan
     
     
        # ==================================================
        #                              TreeView
        # ==================================================
     
     
        # --- Insertion Table Nom HV dans TreeView
        def DisplayData():
            for i in Recette_DB_BackEnd.loadRecord():
                # print("Nom de la recette --> ", i[0])
                Rec_list.insert('', 'end', text=i[0], values=(i[0]))
     
        # --- Insertion Scrollbar
        scrollbar_y = Scrollbar(Recette_TreView, orient='vertical')                                 # Ascenseur Vertical
        scrollbar_y.place(x=299, y=0, height=169)
     
     
        Rec_list = ttk.Treeview(Recette_TreView, selectmode="browse", columns=(1), show="headings", yscrollcommand=scrollbar_y.set) 
        # --- En-tête
        Rec_list.heading('#1', text="Recettes")
        # --- Largeur Colonnes
        Rec_list.column('#1', width=300, minwidth=40, stretch=OFF)
        Rec_list.place(x=0, y=0, width=301, height=168)
     
        scrollbar_y.config(command=Rec_list.yview)                                                       # Ascenseur Vertical
     
        DisplayData()
     
     
     
        def selectionItem(a):
            # === [Sélection - Widget Treeview] ===
     
     
            curItem = Rec_list.focus()
            Liste = Rec_list.item(curItem)["values"]
            # print("winfo_name()", Rec_list.winfo_name())                                            # ID widget Treeview -- Exemple : winfo_name() !treeview
            # print("Liste - TreeView - Recette sélectionnée", Liste)                                 # Affiche la sélection contenu de la liste
            # print("Liste - TreeView - Colonne Nom -->", Liste[0])
            # for child in Rec_list.get_children():                                                            # Listing du contenu de la Treeview -- Exemple : ['Recette_2020.05_8_30.5_NoName']
            #     print(Rec_list.item(child)["values"])
            # print("Rec_list.item(curItem)[","values","][0]          ", Rec_list.item(curItem)["values"][0])                                   # Affiche Nom recette depuis Treeview -- Exemple : Recette_2020.05_8_30.5_NoName
            # print("Rec_list.get_children()", Rec_list.get_children())                                                                                       # iid -- Renvoie un tuple des valeurs iid des enfants de l'élément spécifié par l'argument élément. S'il est omis, vous obtenez un tuple contenant les valeurs iid des éléments de niveau supérieur.  --- exemple : Rec_list.get_children() ('I001', 'I002', 'I003', 'I004')
            # print("Rec_list.get_children()[0]", Rec_list.get_children()[0])
     
            # print("Rec_list.get_children()", Rec_list.get_children([Rec_list.item(curItem)["values"][0]]))   ????????????????????
     
            Rec_list.selection_set(Rec_list.get_children()[1])
            Rec_list.focus_set()
            Rec_list.focus(Rec_list.get_children()[1])
     
     
        # ==================================================
        #                              Evénement Treeview
        # ==================================================
        # via souris
        Rec_list.bind('<ButtonRelease-1>', selectionItem)                                         # Le bouton de la souris a été relâché
    je suis obligé d'activer Rec_list.bind ...., puis cliquer sur une des lignes pour que la ligne cible soit effectivement mise ne surbrillance
    votre aide est la bien venue. merci de votre temps
    Dernière modification par Invité ; 01/06/2020 à 10h46.

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Citation Envoyé par taratatasoleil Voir le message
    le but est d'obtenir la surbrillance d'une des lignes affichée par un Treeview (qu'une présélection soit déjà proposée)
    La surbrillance d'un item peut s'obtenir avec des "tags".

    Si on veut positionner la selection et le focus sur un item particulier (ce qui donne aussi une sur-chose qui montre quelle ligne est sélectionnée), çà se fait via .focus(iid) ou .selection_set(iid)iid est l'identifiant de la ligne retourné par .insert.

    Je peux poster un exemple de plus que ceux que vous avez déjà trouvé:
    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
    import tkinter as tk
    import tkinter.ttk as ttk
     
    tree = ttk.Treeview()
    for i in range(10):
        iid = tree.insert('', 'end', text=i)
    tree.pack()
     
    def move_bottom():
        iid = tree.get_children('')[-1]
        if iid != tree.focus():
            tree.focus(iid)
            tree.selection_set(iid)
     
    tk.Button(text='move', command=move_bottom).pack()
    tree.mainloop()
    mais comme je ne comprends pas trop ce que vous herchez à faire dans le code que vous avez posté, pas sûr que çà aide plus.

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

  3. #3
    Invité
    Invité(e)
    Par défaut
    merci pour votre réponse,

    je passe bien par l'identifiant iid (cela fonctionne bien)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Rec_list.get_children()   <--- tous les identifiants 
    Rec_list.get_children()[0]   <--- identifiant ciblé
    le but est qu'une fois la surbrillance positionnée sur un Item, qu'il soit automatiquement sélectionné sans intervention de la souris ou clavier.
    A ce stade, il me faut connaitre l'état d'un bouton de souris pour le changer en actif.

    Au final, ce sera une auto sélection de item du treview pour être afficher dans une frame.

  4. #4
    Invité
    Invité(e)
    Par défaut
    actuellement, la sélection et la mise en surbrillance fonctionne correctement vis idd

    mes recherches sur l'état du bouton souris ou touche clavier ne donne rien.
    Est-il possible, de changer l'état d'un bouton afin de simuler le click?

    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
    # coding:utf-8
    #version 3.x python
     
    from tkinter import *
    from tkinter.ttk import *
    from tkinter import ttk
     
     
    def Load_Recette_Contenu():
     
        Load_Recette = tk.Toplevel()
        Load_Recette.title("Ouvrit une recette SAF")
        Load_Recette.geometry("325x178+0+0")
        Load_Recette.resizable(width=False, height=False)                                            # Fenêtre verrouillée
        Load_Recette.attributes("-toolwindow", 1)                                                         # Supprime les boutons Réduire/Agrandir
        Load_Recette.attributes("-topmost", 1)                                                             # au premier plan
     
     
        # ==================================================
        #                              TreeView
        # ==================================================
     
     
        # --- Insertion Table Nom HV dans TreeView
        def DisplayData():
            for i in Recette_DB_BackEnd.loadRecord():
                # print("Nom de la recette --> ", i[0])
                Rec_list.insert('', 'end', text=i[0], values=(i[0]))
     
        # --- Insertion Scrollbar
        scrollbar_y = Scrollbar(Recette_TreView, orient='vertical')                                 # Ascenseur Vertical
        scrollbar_y.place(x=299, y=0, height=169)
     
     
        Rec_list = ttk.Treeview(Recette_TreView, selectmode="browse", columns=(1), show="headings", yscrollcommand=scrollbar_y.set) 
        # --- En-tête
        Rec_list.heading('#1', text="Recettes")
        # --- Largeur Colonnes
        Rec_list.column('#1', width=300, minwidth=40, stretch=OFF)
        Rec_list.place(x=0, y=0, width=301, height=168)
     
        scrollbar_y.config(command=Rec_list.yview)                                                       # Ascenseur Vertical
     
        DisplayData()
     
     
     
        def selectionItem(a):
            # === [Sélection - Widget Treeview] ===
     
     
            curItem = Rec_list.focus()
            Liste = Rec_list.item(curItem)["values"]
            # print("winfo_name()", Rec_list.winfo_name())                                            # ID widget Treeview -- Exemple : winfo_name() !treeview
            # print("Liste - TreeView - Recette sélectionnée", Liste)                                 # Affiche la sélection contenu de la liste
            # print("Liste - TreeView - Colonne Nom -->", Liste[0])
            # for child in Rec_list.get_children():                                                            # Listing du contenu de la Treeview -- Exemple : ['Recette_2020.05_8_30.5_NoName']
            #     print(Rec_list.item(child)["values"])
            # print("Rec_list.item(curItem)[","values","][0]          ", Rec_list.item(curItem)["values"][0])                                   # Affiche Nom recette depuis Treeview -- Exemple : Recette_2020.05_8_30.5_NoName
            # print("Rec_list.get_children()", Rec_list.get_children())                                                                                       # iid -- Renvoie un tuple des valeurs iid des enfants de l'élément spécifié par l'argument élément. S'il est omis, vous obtenez un tuple contenant les valeurs iid des éléments de niveau supérieur.  --- exemple : Rec_list.get_children() ('I001', 'I002', 'I003', 'I004')
            # print("Rec_list.get_children()[0]", Rec_list.get_children()[0])
     
            # print("Rec_list.get_children()", Rec_list.get_children([Rec_list.item(curItem)["values"][0]]))   ????????????????????
     
            z = -1
            for child in Rec_list.get_children():
                print(child)
                z = z +1
                Rec_list.selection_set(Rec_list.get_children()[z])
                Rec_list.focus_force()
                Rec_list.focus_set()
                Rec_list.focus(Rec_list.get_children()[z])
                time.sleep(3)
                Rec_list.update()
     
            # -- Identifie le type de bouton activé --
            # un bouton pressé(event.type = 4)
            # un bouton relaché(event.type = 5)
            # un bouton pressé en mouvement(event.type = 6)
            print("\ntype :", a.type)
            # -- Identifie quel bouton pressé --
            # clic gauche(Bouton 1): event.num = 1
            # clic droit(Bouton 3): event.num = 3
            print("num :", a.num)
            # Load_Recette.update()
            # Rec_list.event_generate('<ButtonPress-1>')
            # Load_Recette.update()
     
     
        # ==================================================
        #                              Evénement Treeview
        # ==================================================
        # via souris
        Rec_list.bind('<ButtonRelease-1>', selectionItem)                                         # Le bouton de la souris a été relâché

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Salut,

    Si le problème est résolu, marquez la discussion sinon il faut préciser.

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

  6. #6
    Invité
    Invité(e)
    Par défaut
    une fois que la sélection et mise en surbrillance d'un Item est faite, il me faut connaitre l'état d'un bouton de souris pour le changer en actif.
    Je cherche à simuler un click souris sur le Item auto sélectionné.

    Au final, ce sera une auto sélection de item du treview pour être afficher dans une frame.

    je ne trouve rien sur une commande donnant l'état d'un bouton souris et comment y changer son état par 0 ou 1, je supose.

Discussions similaires

  1. Auto focus sur une page a chaque fois que son contenu se change
    Par solicel dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 08/01/2010, 09h21
  2. [C#]garder le focus sur un node d'un treeview
    Par Blo0d4x3 dans le forum Windows Forms
    Réponses: 3
    Dernier message: 09/05/2006, 21h23
  3. [C#][.Net 2.0] donner focus à Combobox, après click sur treeview
    Par Harry_polin dans le forum Windows Forms
    Réponses: 3
    Dernier message: 17/02/2006, 22h27
  4. focus sur un TreeView
    Par steph_1 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 07/11/2005, 13h50
  5. Pb d'auto-incrément sur une table v7
    Par Nivux dans le forum Paradox
    Réponses: 9
    Dernier message: 26/12/2002, 12h05

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