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 :

Conserver selection dans une listbox


Sujet :

Tkinter Python

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut Conserver selection dans une listbox
    Bonjour,

    Je rencontre actuellement un problème, j'ai dans un programme une listbox comprenant un certain nombre de nom de fichiers faisant référence à des fichiers sur lesquels je souhaite faire des opérations ensuite. Je souhaiterais pouvoir choisir un nom de fichier dans ma liste et ensuite entrer certaines options relatives à ce fichier.

    Cependant après avoir choisit mon fichier dans la listbox je clique sur un widget de type Entry pour entrer une option, je perds alors ma sélection dans la listbox. Ce que je souhaiterais c'est conserver cette selection.

    En parcourant le web j'ai trouvé qu'il faut probablement utiliser la méthode selection_set() cependant j'ai un peu de mal à comprendre ce que fait cette méthode, j'ai l'impression qu'elle ne fait que surligner les éléments choisit, est ce qu'il y a un moyen d'avoir accès à ces éléments ensuite ce qui réglerais mon problème (peu être en utilisant ACTIVE ou ANCHOR pour les index) ? J'ai également une question concernant selection_anchor(), que fait elle exactement ?

    Voilà je remercie d'avance tout ceux qui m' apporterons leur aide.

  2. #2
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par Schopenhauer Voir le message
    Cependant après avoir choisit mon fichier dans la listbox je clique sur un widget de type Entry pour entrer une option, je perds alors ma sélection dans la listbox. Ce que je souhaiterais c'est conserver cette selection.
    Je n'arrive pas à reproduire ce phénomène.
    Que donne le code suivant pour vous ?
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
     
    lb = Tk.Listbox(root, selectmode=Tk.SINGLE)
    lb.pack(padx=5, pady=5)
     
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq']:
        lb.insert(Tk.END, item)
     
    l = Tk.Label(root, bg='white')
    l.pack(padx=5, pady=5, fill=Tk.BOTH, expand=1)
     
    def isselect(event=None):
        if lb.curselection():
            l.config(text='Selection actuelle : '+lb.get(lb.curselection()))
        else:
            l.config(text='Pas de selection')
     
    e = Tk.Entry(root)
    e.pack(padx=5, pady=5)
    e.bind('<Button-1>' , isselect)
     
    root.mainloop()
    Si vous perdez aussi la sélection pourriez vous nous donner votre os ainsi que la version de Python ?
    Dans le cas contraire cela viens de votre code.

    @+

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Bonjour,

    Merci pour cette réponse et merci pour le code test que vous me proposé.

    Alors j'ai moi aussi effectué quelques tests et je pense avoir cerné le problème (si toutefois c'en est un).

    Je n'avais pas remarqué cela lors de mon premier post. Apparament le problème ne se pose pas lors d'une utilisation "normal" du programme, mais si l'on clique 3 fois sur l'entry.

    Chez moi le phénomène se produit avec votre code et le mien sous unbutu avec python 2.6.5 et cela se produit avec votre code également sous XP (je n'ai pas pus tester mon code sous XP n'ayant pas developpé encore sa version sous windows) avec cette fois python 2.7 sur la machine.

    Alors il sagit peu être en fait d'un comportement normal, je trouve cela embêtant car mon programme plantait parfois, étant donné que plus rien ne se trouvait dans le tuple de retour. J'ai palié ce problème en enregistrant l'index dans une variable dès le premier clic. Mais j'aimerais tout de même savoir d'où vient ce phénomène.

    Merci encore.

    edit : je précise qu'après encore quelques test il faut a priori cliquer rapidement, faire une sorte de "triple clique".

  4. #4
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    Citation Envoyé par Schopenhauer Voir le message
    Je n'avais pas remarqué cela lors de mon premier post. Apparament le problème ne se pose pas lors d'une utilisation "normal" du programme, mais si l'on clique 3 fois sur l'entry.
    Cela doit venir de la:
    doc Tcl/Tk
    Database Class: ExportSelection
    Specifies whether or not a selection in the widget should also be the X selection. The value may have any of the forms accepted by Tcl_GetBoolean, such as true, false, 0, 1, yes, or no. If the selection is exported, then selecting in the widget deselects the current X selection, selecting outside the widget deselects any widget selection, and the widget will respond to selection retrieval requests when it has a selection. The default is usually for widgets to export selections.
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
     
    lb = Tk.Listbox(root, selectmode=Tk.SINGLE, exportselection=0)
    lb.pack(padx=5, pady=5)
     
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq']:
        lb.insert(Tk.END, item)
     
    l = Tk.Label(root, bg='white')
    l.pack(padx=5, pady=5, fill=Tk.BOTH, expand=1)
     
    def isselect(event=None):
        if lb.curselection():
            l.config(text='Selection actuelle : '+lb.get(lb.curselection()))
        else:
            l.config(text='Pas de selection')
     
    e = Tk.Entry(root)
    e.pack(padx=5, pady=5)
    e.bind('<Button-1>' , isselect)
     
    root.mainloop()
    @+

  5. #5
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    C'est bien cela (pas de poste pour tester )

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
     
    lb1 = Tk.Listbox(root)
    lb1.grid(row=0, column=0, padx=5, pady=5)
    l1 = Tk.Label(root, bg='white')
    l1.grid(row=1, column=0, padx=5, pady=5)
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq']:
        lb1.insert(Tk.END, item)
     
    lb2 = Tk.Listbox(root)
    lb2.grid(row=0, column=1, padx=5, pady=5)
    l2 = Tk.Label(root, bg='white')
    l2.grid(row=1, column=1, padx=5, pady=5)
    for item in ['1', '2', '3', '4', '5']:
        lb2.insert(Tk.END, item)
     
    def isselect(listb, lab, downlb):
        if listb.curselection():
            lab.config(text='Selection actuelle : '+listb.get(listb.curselection()))
        else:
            lab.config(text='Pas de selection')
        print(downlb.selection_get())
        print(listb.selection_get())
     
    e1 = Tk.Entry(root)
    e1.grid(row=2, column=0, padx=5, pady=5)
    e1.bind('<Button-1>', lambda event=None: isselect(lb1, l1, l2))
     
    e2 = Tk.Entry(root)
    e2.grid(row=2, column=1, padx=5, pady=5)
    e2.bind('<Button-1>', lambda event=None: isselect(lb2, l2, l1))
     
    root.mainloop()
    @+

  6. #6
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour Schopenhauer,

    Petit bonus du Week-end sur l'option exportselection.
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
    root.title("L'option exportselection avec les Widgets Entry et Listbox")
    Tk.Label(root, text='exportselection=1').grid(row=0, column=1, padx=5, pady=5, sticky=Tk.E+Tk.W)
    Tk.Label(root, text='Listbox exportselection=1\nEntry exportselection=0').grid(row=0, column=2, padx=5, pady=5, sticky=Tk.E+Tk.W)
    Tk.Label(root, text='exportselection=0').grid(row=0, column=3, padx=5, pady=5, sticky=Tk.E+Tk.W)
    Tk.Label(root, text='Listbox exportselection=0\nEntry exportselection=1').grid(row=0, column=4, padx=5, pady=5, sticky=Tk.E+Tk.W)
    Tk.Label(root, text='Listbox').grid(row=1, column=0, padx=5, pady=5)
    Tk.Label(root, text='Selection dans\nla Lisbox').grid(row=2, column=0, padx=5, pady=5)
    Tk.Label(root, text="'Clipboard'/Sélection\nselection_get() sur la Listbox").grid(row=3, column=0, padx=5, pady=5)
    Tk.Label(root, text='Entry (un clic/deux clics)').grid(row=4, column=0, padx=5, pady=5)
    # exportselection=1
    lb1 = Tk.Listbox(root, selectmode=Tk.SINGLE)
    lb1.grid(row=1, column=1, padx=5, pady=5)
    l1 = Tk.Label(root, bg='white')
    l1.grid(row=2, column=1, padx=5, pady=5, sticky=Tk.E+Tk.W)
    lr1 = Tk.Label(root, bg='yellow')
    lr1.grid(row=3, column=1, padx=5, pady=5, sticky=Tk.E+Tk.W)
    e1 = Tk.Entry(root)
    e1.grid(row=4, column=1, padx=5, pady=5)
    e1.insert(0, '11111')
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq']:
        lb1.insert(Tk.END, item)
    # Listbox exportselection=1 / Entry exportselection=0
    lb2 = Tk.Listbox(root, selectmode=Tk.SINGLE)
    lb2.grid(row=1, column=2, padx=5, pady=5)
    l2 = Tk.Label(root, bg='white')
    l2.grid(row=2, column=2, padx=5, pady=5, sticky=Tk.E+Tk.W)
    lr2 = Tk.Label(root, bg='yellow')
    lr2.grid(row=3, column=2, padx=5, pady=5, sticky=Tk.E+Tk.W)
    e2 = Tk.Entry(root, exportselection=0)
    e2.grid(row=4, column=2, padx=5, pady=5)
    e2.insert(0, '22222')
    for item in ['uno', 'dos', 'tres', 'cuatro', 'cinco']:
        lb2.insert(Tk.END, item)
    # exportselection=0
    lb3 = Tk.Listbox(root, exportselection=0, selectmode=Tk.SINGLE)
    lb3.grid(row=1, column=3, padx=5, pady=5)
    l3 = Tk.Label(root, bg='white')
    l3.grid(row=2, column=3, padx=5, pady=5, sticky=Tk.E+Tk.W)
    lr3 = Tk.Label(root, bg='yellow')
    lr3.grid(row=3, column=3, padx=5, pady=5, sticky=Tk.E+Tk.W)
    e3 = Tk.Entry(root, exportselection=0)
    e3.grid(row=4, column=3, padx=5, pady=5)
    e3.insert(0, '33333')
    for item in ['one', 'two', 'three', 'four', 'five']:
        lb3.insert(Tk.END, item)
    # Listbox exportselection=0 / Entry exportselection=1
    lb4 = Tk.Listbox(root, exportselection=0, selectmode=Tk.SINGLE)
    lb4.grid(row=1, column=4, padx=5, pady=5)
    l4 = Tk.Label(root, bg='white')
    l4.grid(row=2, column=4, padx=5, pady=5, sticky=Tk.E+Tk.W)
    lr4 = Tk.Label(root, bg='yellow')
    lr4.grid(row=3, column=4, padx=5, pady=5, sticky=Tk.E+Tk.W)
    e4 = Tk.Entry(root)
    e4.grid(row=4, column=4, padx=5, pady=5)
    e4.insert(0, '44444')
    for item in ['eins', 'zwei', 'drei', 'vier', 'fünf']:
        lb4.insert(Tk.END, item)
     
    def isselect(event=None):
        # curselection()
        for lisb, lab in ((lb1, l1), (lb2, l2), (lb3, l3), (lb4, l4)):
            try:
                lab.config(text=lisb.get(lisb.curselection()))
            except Tk.TclError:
                lab.config(text='Pas de selection')
        # selection_get() sur la Listbox
        for lb, l in ((lb1, lr1), (lb2, lr2), (lb3, lr3), (lb4, lr4)):
            try:
                l.config(text=lb.selection_get())
            except Tk.TclError:
                l.config(text='Vide')
     
    for Widget in (e1, lb1, e2, lb2, e3, lb3, e4, lb4):
        Widget.bind('<ButtonRelease-1>', isselect)
    Tk.Button(root, text='Quitter', command=root.quit).grid(row=4, column=5, padx=5, pady=5)
    root.mainloop()
    @+

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Merci d'avoir pris le temps de me répondre avec autant d'exemple, je vais lire attentivement tous tout cela et si je ne comprend pas quelque chose je repasse ici.

    Merci encore.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Re bonjour .

    J'ai joué un peu avec tout cela, et j'ai fais quelques recherches de mon coté, je voudrais savoir si j'ai bien tout comprit :

    Si exportselection est activé, toute selection dans un widget supprimera les selections courantes dans les autre widgets de plus une copie de la selection sera envoyé au clipboard.

    Chose que l'on voit dans votre programme mais également en utilisant la commande :

    xsel -o sous linux

    donc si je comprends bien .selection_get() fais appelle au clipboard pour 'retrouver' la dernière sélection, par conséquent cela peu posé des problèmes, notamment avec un widget entry on l'on peu modifier la sélection d'une listbox en exploitant le fait que exportselection est activé.

    Bon si c'est bien ça j'aurais apprit beaucoup de chose aujourd'hui, ne sachant pas à la base exactement à quoi correspondais la sélection X . Enfin maintenant a priori je sais

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 428
    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 428
    Points : 37 010
    Points
    37 010
    Par défaut
    Salut
    Si exportselection est activé, toute selection dans un widget supprimera les selections courantes dans les autre widgets de plus une copie de la selection sera envoyé au clipboard
    A mon sens, cette feature n'est "valide" que pour les ListBox TK.
    Imaginez l'affichage d'une ListBox, d'une ttk:TreeView et d'un Canvas.
    Les sélections de TreeView et de ListBox ne se mélangent pas et... pour changer la sélection il faut "cliquer" dans... i.e. avoir le focus -ou le faire de façon programmatique.
    Pour le Canvas, la sélection est à construire en fonction de vos besoins.
    Cordialement,
    - W

  10. #10
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    A vrais dire cela concerne quatre Widgets: Entry, Text, Spinbox et Listbox.

    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
    root.title('Les quatre Widgets farceurs')
    w1 = Tk.Listbox(root)
    w1.grid(row=0, column=0, padx=5, pady=5)
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq']:
        w1.insert(Tk.END, item)
    w2 = Tk.Text(root)
    w2.grid(row=0, column=1, padx=5, pady=5)
    w2.insert(Tk.END, 'uno')
    w3 = Tk.Spinbox(root, values=('one', 'two', 'three', 'four', 'five'))
    w3.grid(row=0, column=2, padx=5, pady=5)
    w4 = Tk.Entry(root)
    w4.grid(row=0, column=3, padx=5, pady=5)
    w4.insert(0, '1111111')
    result = Tk.Label(root, bg='yellow')
    result.grid(row=1, column=1, padx=5, pady=5, sticky=Tk.E+Tk.W) 
    for Widget in (w1, w2, w3, w4):
        Widget.bind('<ButtonRelease-1>', lambda event=None:
            result.config(text=w1.selection_get()))
    Tk.Button(root, text='Quitter', command=root.quit).grid(row=1, column=3,
        padx=5, pady=5)
    root.mainloop()
    @+

    Edit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for Widget in (w1, w2, w3, w4):
        Widget.bind('<ButtonRelease-1>', lambda event=None:
            result.config(text=root.selection_get()))
    Après tout le root Tk a le droit de savoir ce qui se passe chez lui

  11. #11
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Bonjour,

    J'avais oublier cette question:
    Citation Envoyé par Schopenhauer Voir le message
    J'ai également une question concernant selection_anchor(), que fait elle exactement ?
    Peut être qu'un bout de code sur ACTIVE/ANCHOR vous permettras de comprendre les subtilités de ses deux la.
    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
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    #
    #
    try:
        import Tkinter as Tk
    except:
        import tkinter as Tk
     
    root = Tk.Tk()
    root.title('ACTIVE et ANCHOR')
    lb = Tk.Listbox(root, selectmode=Tk.SINGLE)
    lb.pack(padx=5, pady=5)
    for item in ['un', 'deux', 'trois', 'quatre', 'cinq', 'six', 'sept', 'huit',
        'neuf', 'dix']:
        lb.insert(Tk.END, item)
    sb = Tk.Scrollbar(root)
    sb.pack(side=Tk.RIGHT, fill=Tk.Y)
    result = Tk.Text(root)
    result.pack(side=Tk.LEFT)
    sb.config(command=result.yview)
    result.config(yscrollcommand=sb.set)
    result.insert(Tk.END, 'Sélectionnez un élément dans la Listbox.\n')
    result.insert(Tk.END, '****************************************\n')
    result.config(state=Tk.DISABLED)
     
    def isselect(msg):
        result.config(state=Tk.NORMAL)
        result.insert(Tk.END, msg)
        result.insert(Tk.END, 'get(ACTIVE) ' + lb.get(Tk.ACTIVE) + '\n')
        result.insert(Tk.END, 'index(ACTIVE) ' + str(lb.index(Tk.ACTIVE)) + '\n')
        result.insert(Tk.END, 'get(ANCHOR) ' + lb.get(Tk.ANCHOR) + '\n')
        result.insert(Tk.END, 'index(ANCHOR) ' + str(lb.index(Tk.ANCHOR)) + '\n')
        result.insert(Tk.END, 'curselection() ' + str(lb.curselection()) + '\n')
        result.insert(Tk.END, '*********************\n')
        result.config(state=Tk.DISABLED)
     
    lb.bind('<Button-1>', lambda event=None: isselect('<Button-1>\n'))
    # <ButtonRelease-1> == <<ListboxSelect>>
    lb.bind('<ButtonRelease-1>', lambda event=None: isselect('<ButtonRelease-1>\n'))
    root.mainloop()
    @+

  12. #12
    Membre à l'essai
    Profil pro
    Inscrit en
    Août 2010
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 42
    Points : 21
    Points
    21
    Par défaut
    Merci pour tous ces codes, en effet cela aide à comprendre les choses.

    Donc ACTIVE correspond à l'élément de la listbox encadré de pointillés que l'on peu obtenir soit en cliquant sur un élément soit en utilisant les flèches haut bas du clavier.

    Alors que ANCHOR correspond à l'élément sélectionné en bleu dans la liste.

    Si j'ai tout bon entre mon précédent post et celui-ci j'aurais vraiment apprit plein de choses.

    Merci encore. Je vais pouvoir modifier mon code en conséquence.

Discussions similaires

  1. [XL-2010] Selection dans une listbox
    Par MatthieuT42 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 10/06/2015, 11h37
  2. [XL-2007] Test si il y a une selection dans une listbox
    Par Ltspitfire dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/12/2014, 12h59
  3. [XL-2003] Selection dans une listbox et impression d'un TCD
    Par fabian123 dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 16/11/2014, 13h03
  4. Interdire la selection dans une listBox
    Par beaf05 dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 06/01/2012, 12h04
  5. la selection dans une listbox
    Par etoile_de_vie dans le forum C#
    Réponses: 4
    Dernier message: 23/09/2008, 15h57

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