Problème récupération ligne liste tkinter

Résolu/Fermé
worox Messages postés 23 Date d'inscription mercredi 13 avril 2022 Statut Membre Dernière intervention 1 septembre 2022 - 29 août 2022 à 23:27
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 30 août 2022 à 10:34

Bonjour, je cherche à récupérer la ligne sélectionnée dans ma liste. 
Voici le code morceau de code en question. 

Pour expliquer avant, quand je clique sur une ligne, une erreur apparait.
 

def get_list1():
    index = list1.curselection()
    print(index)
    pass


list1.bind("<<ListboxSelect>>", get_list1)

l'erreur que me sort le programme est la suivante : 

Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python310\lib\tkinter\__init__.py", line 1921, in __call__
    return self.func(*args)
TypeError: get_list1() takes 0 positional arguments but 1 was given

Si vous souhaitez le code entier pour l'exécuter, le voici : 

from tkinter import *


def Confirm():
    fr_entry_1.get()
    if fr_entry_1.get() == i:
        erer1.set("")
        i_n = 1
    else:
        fr_entry_1.set("")
        erer1.set(m_inco)
        i_n = 0

    if tr_entry_2.get() == m_hard:
        erer2.set("")
        m_n = 3
    elif tr_entry_2.get() == m_medio:
        erer2.set("")
        m_n = 2
    elif tr_entry_2.get() == m_simple:
        erer2.set("")
        m_n = 1
    else:
        tr_entry_2.set("")
        erer2.set(m_inco)
        m_n = 0

    if m_n == 1 and i_n == 1:
        print("cool")
        label_acceuil.pack_forget()
        frame_mp.pack_forget()
        entry_1.pack_forget()
        erreur1.pack_forget()
        entry_2.pack_forget()
        erreur2.pack_forget()
        confirm.pack_forget()

        label_expli1.pack(side="top")
        list1.pack()
        entry_mot_de_passe1.pack(pady=5)
        buton_add1.pack(side='bottom')

    elif m_n == 2 and i_n == 1:
        print("cool")
        label_acceuil.pack_forget()
        frame_mp.pack_forget()
        entry_1.pack_forget()
        erreur1.pack_forget()
        entry_2.pack_forget()
        erreur2.pack_forget()
        confirm.pack_forget()

        label_expli2.pack(side="top")

    elif m_n == 3 and i_n == 1:
        print("cool")
        label_acceuil.pack_forget()
        frame_mp.pack_forget()
        entry_1.pack_forget()
        erreur1.pack_forget()
        entry_2.pack_forget()
        erreur2.pack_forget()
        confirm.pack_forget()

        label_expli3.pack(side="top")


def Add1():
    buton_add1.pack_forget()
    label_expli1.pack_forget()
    entry_mot_de_passe1.pack_forget()
    list1.pack_forget()

    label_expli_case.pack(side="top")
    frame_add_pass.pack(pady=20)
    entry_name.pack()
    label_name.pack()
    entry_pass.pack()
    label_pass.pack()
    entry_lien.pack(pady=5)
    bouton_confirme_add1.pack()
    bouton_annuler_add1.pack()


def BoutonConfirmeAdd1():
    global pass_word
    global nam_word
    global lien_word

    index_list1 = list1.size()
    case1 = entry_name_var.get()
    case2 = entry_pass_var.get()
    case3 = entry_lien_var.get()
    case3alter = "_"

    case1n = len(case1)
    case2n = len(case2)
    case3n = len(case3)

    ok1 = 0
    ok2 = 0

    print(case1)
    print(case2)
    print(case3)

    print(case1n)
    print(case2n)

    if case1n < 1:
        label_name_var.set(m_inco)
    else:
        print("cool")
        label_name_var.set("")
        ok1 = 1


    if case2n < 15:
        label_pass_var.set(m_inco)
    else:
        print("cool")
        label_pass_var.set("")
        ok2 = 2



    if ok1 == 1 and ok2 == 2:
        nam_word.append(case1)
        pass_word.append(case2)

        if case3n  < 1:
            lien_word.append(case3alter)
        else:
            lien_word.append(case3)

        print(nam_word)
        print(pass_word)
        print(lien_word)

        list1.insert(index_list1, nam_word)

        label_expli_case.pack_forget()
        frame_add_pass.pack_forget()
        entry_name.pack_forget()
        entry_name_var.set("")
        label_name.pack_forget()
        entry_pass.pack_forget()
        entry_pass_var.set("")
        label_pass.pack_forget()
        entry_lien.pack_forget()
        entry_lien_var.set("")
        bouton_confirme_add1.pack_forget()
        bouton_annuler_add1.pack_forget()

        label_expli1.pack(side="top")
        list1.pack()
        entry_mot_de_passe1.pack(pady=5)
        buton_add1.pack(side='bottom')


def BoutonAnnulerAdd1():
    label_expli_case.pack_forget()
    frame_add_pass.pack_forget()
    entry_name.pack_forget()
    entry_name_var.set("")
    label_name.pack_forget()
    entry_pass.pack_forget()
    entry_pass_var.set("")
    label_pass.pack_forget()
    entry_lien.pack_forget()
    entry_lien_var.set("")
    bouton_confirme_add1.pack_forget()
    bouton_annuler_add1.pack_forget()

    label_expli1.pack(side="top")
    list1.pack()
    buton_add1.pack(side='bottom')


def get_list1():
    index = list1.curselection()
    print(index)
    pass


pass_word = []
nam_word = []
lien_word = []


acc = "Bienvenue dans le stockage de mot de passe de niveau "
m_inco = "incorrect"
m_hard = "Harry@thme!tique56,suitedefibonacci"
m_medio = "Harry@thme!tique56"
m_simple = "Hardouin@56"
i = "worox"
i_n = 0
m_n = 0

# fenêtre info
ftr = Tk()
ftr.geometry("250x250")
ftr.minsize(50, 50)
ftr.maxsize(500, 500)
ftr.configure(bg="#1277F1")

# pr acceuille
label_acceuil = Label(ftr, text="bienvenue", bg="#1296F1")

frame_mp = Frame(ftr, bg="#4FF112", borderwidth=1)
fr_entry_1 = StringVar()
tr_entry_2 = StringVar()
fr_entry_1.set("worox")
tr_entry_2.set("Hardouin@56")
entry_1 = Entry(frame_mp, width=20, textvariable=fr_entry_1)
entry_2 = Entry(frame_mp, width=20, textvariable=tr_entry_2)
erer1 = StringVar()
erreur1 = Label(frame_mp, textvariable=erer1)
erer2 = StringVar()
erreur2 = Label(frame_mp, textvariable=erer2)

confirm = Button(ftr, text="confirmer", bg="#EB7C07", command=Confirm)

# tr add1
label_expli1 = Label(ftr, text=f"{acc}1")
list1 = Listbox(ftr)
entry_mot_de_passe1_var = StringVar()
entry_mot_de_passe1 = Entry(ftr, textvariable=entry_mot_de_passe1_var)
buton_add1 = Button(ftr, text="ajouter un mot de passe", command=Add1)

# tr add1 mot de passe
frame_add_pass = Frame(ftr)

label_expli_case = Label(frame_add_pass, text="completer les cases ci dessous")
entry_name_var = StringVar()
entry_name = Entry(frame_add_pass, textvariable=entry_name_var)
label_name_var = StringVar()
label_name = Label(frame_add_pass, textvariable=label_name_var)
entry_pass_var = StringVar()
entry_pass = Entry(frame_add_pass, textvariable=entry_pass_var)
label_pass_var = StringVar()
label_pass = Label(frame_add_pass, textvariable=label_pass_var)
entry_lien_var = StringVar()
entry_lien = Entry(frame_add_pass, textvariable=entry_lien_var)

bouton_confirme_add1 = Button(ftr, text="Confirmer", command=BoutonConfirmeAdd1)
bouton_annuler_add1 = Button(ftr, text="annuler", command=BoutonAnnulerAdd1)
# tr add2
label_expli2 = Label(ftr, text=f"{acc}2")

# tr add3
label_expli3 = Label(ftr, text=f"{acc}3")

# pack acceuille
label_acceuil.pack(side="top", fill="x")
frame_mp.pack(pady=50, padx=50)
entry_1.pack(pady=5, padx=5)
erreur1.pack()
entry_2.pack(pady=5, padx=5)
erreur2.pack()
confirm.pack()


list1.bind("<<ListboxSelect>>", get_list1)

ftr.mainloop()

Merci d'avance.
Windows / Chrome 104.0.0.0

A voir également:

1 réponse

Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 178
Modifié le 30 août 2022 à 11:14

Bonjour,

Ta fonction étant en fait liée à une action dans une Listbox, c'est une fonction callback et l'interpréteur lui

passe un argument avec des évènements

Il faut écrire: 

 def get_list1(event):

 A part ça, on écrit accueil et non pas acceuille  :-)

1