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 :

tkinter listbox indice


Sujet :

Tkinter Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2017
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2017
    Messages : 5
    Points : 4
    Points
    4
    Par défaut tkinter listbox indice
    Bonjour,

    Je créer une listbox dans une fonction et je souhaite que lorsque l'on clique sur un des éléments de la liste cela appelle une autre fonction en faisant passer différents paramètres, dont l'indice de l'élément sélectionné :
    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
     
        fen_Sel_Date=Frame(fensterDate,bg='white',borderwidth=1)
        fen_Sel_Date.pack(fill=BOTH)
        champ_label = Label(fen_Sel_Date, text="Choisissez une date et placez les satellites pour la station "+str(detailStation[0]))
        champ_label.pack()
        scrollbar = Scrollbar(fen_Sel_Date, orient=VERTICAL)
        listeDatum=[]
        print("Remplissage de la liste des dates")
        for elementDates in DictDates:
            if listeDatum.count(arrondiDate(elementDates["TIME"]))==0 :
                #listeDates.insert(END,str(arrondiDate(elementDates["TIME"])))
                listeDatum.append(arrondiDate(elementDates["TIME"]))
        # creation de la listbox
        boxDates=Listbox(fen_Sel_Date , font=gross_font, yscrollcommand=scrollbar.set)
        for elementDate in listeDatum:
            boxDates.insert(END,str(elementDate))
            #print(elementDates["TIME"])
        boxDates.bind('<ButtonRelease-1>',selectedItem(boxDates.curselection(),listeDatum))
        scrollbar.config(command=boxDates.yview)
        scrollbar.pack(side=RIGHT, fill=Y)
        boxDates.pack() :
    La fonction appelée "selectedItem" est la suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def selectedItem(iSelected,listeDatum2):
        print("Selection :")
        print(iSelected)
        print("Liste :")    
        print(listeDatum2)
    Cette fonction est exécutée lors de la création de la listbox et non quand on clique sur un élément.

    Si je fais la modification suivante dans la première fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        boxDates.bind('<ButtonRelease-1>',selectedItem)
    et celle là dans la seconde :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    def selectedItem(evt):
        print(evt) # que me retourne evt ?
        print("Selection :")
        print(iSelected)
        print("Liste :")    
        print(listeDatum)
    La seconde fonction n'est plus exécutée sans cliquer sur un élément de la liste mais je n'arrive à récupérer ni l'indice sélectionné, ni la liste de la précédente fonction.


    Que faire ? Merci de votre aide.

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

    Citation Envoyé par ltisn Voir le message
    Que faire ? Merci de votre aide.
    Il faut commencer par simplifier votre code pour créer un petit script ou vous allez essayer de faire fonctionner la listbox comme vous l'attendez.
    Pour çà il faut lire une documentation voire les exemples d'effbot puis écrire quelques lignes de code comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import tkinter as tk
    from tkinter.constants import END
     
    listbox = tk.Listbox()
    for item in '1234':
        listbox.insert(END, item)
    listbox.pack()
     
    def show_selected(event):
        print(listbox.curselection())
     
    listbox.bind("<Double-Button-1>", show_selected)
    tk.mainloop()
    Ce n'est qu'une fois la mécanique bien comprise qu'on pourra l'intégrer dans son code. Et si on a des difficultés, çà permet de poster un code qu'on pourra exécuter pour comprendre ce que vous racontez.

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

Discussions similaires

  1. [Tkinter] Redimensionner une Listbox
    Par THE_VIP dans le forum Tkinter
    Réponses: 6
    Dernier message: 29/05/2008, 17h36
  2. Indice exposant dans un ListBox
    Par AT dans le forum Débuter
    Réponses: 74
    Dernier message: 15/01/2008, 08h07
  3. [Tkinter] Listbox
    Par THE_VIP dans le forum Tkinter
    Réponses: 6
    Dernier message: 30/04/2006, 21h40
  4. Retrouver l'indice de selection d'une ListBox
    Par beb30 dans le forum MFC
    Réponses: 11
    Dernier message: 12/04/2006, 11h41
  5. Comment contrer la sélection hors indice d'un ListBox ?
    Par bertrand_declerck dans le forum Composants VCL
    Réponses: 10
    Dernier message: 18/08/2005, 12h43

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