Je veux ajouter utiliser le bouton Ajouter / Supprimer pour modifier les valeurs dans un tableau. Je pense utiliser l '«index de curselection» pour obtenir un index, puis utiliser array.remove la valeur sélectionnée. Cependant, j'obtiens une valeur d'index avec une virgule .... J'ai essayé avec la bande mais la virgule ne disparaîtra pas.

import tkinter as tk
window=tk.Tk()
window.title('TEST')
window.geometry('600x600')
e=tk.Entry(window,show=None)
e.pack()
arr_allDesc = []

def add():
        var=e.get()
        lb.insert('end',var)
        arr_allDesc.append(var)
        e.delete(0,'end')
        print(arr_allDesc)

def delete():
        print(lb.curselection())
        word = str(lb.curselection())
        print(arr_allDesc[arr_allDesc.index(word)])
        #print(word)
        #print(word.strip)
        #select = str(lb.curselection())
        #print(select)
        #arr_allDesc.remove(select)
        #lb.delete(lb.curselection())
        #print(arr_allDesc)

b1=tk.Button(window,text='add',width=15,command=add)
b1.pack() 


b2=tk.Button(window,text='delete',command=delete)
b2.pack()

lb=tk.Listbox(window)
lb.pack()
window.mainloop()

Je peux utiliser le bouton d'ajout pour créer un tableau comme ci-dessous: ['', '1', '2', '3', '33']

Mais j'obtiens '(2,)' quand j'imprime l'index sélectionné à partir de: array.print (arr_all Desc [arr_all Desc.index (word)]) qui n'est pas dans une liste.

Veuillez me dire où je me suis trompé et pourquoi je ne renvoie pas la valeur d'index correcte. Je pensais que je devrais obtenir comme ceci «2», qui correspondra au tableau et supprimera «2» du tableau.

0
SCH 25 août 2020 à 09:06

2 réponses

Meilleure réponse

curselection renvoie un tuple d'index, car il est possible de configurer la zone de liste pour avoir plus d'un élément sélectionné. Même si vous avez configuré le selectmode pour qu'il soit "unique" (ou que vous acceptez la valeur par défaut), il renvoie toujours un tuple.

La bonne chose à faire est soit de boucler sur tous les éléments de la sélection actuelle, soit d'utiliser l'indexation pour obtenir le premier index sélectionné. Étant donné qu'un seul élément peut être sélectionné, vous pouvez toujours utiliser simplement le premier élément du tuple retourné.

En outre, vous pouvez utiliser l'index calculé pour extraire le mot directement de la zone de liste sans avoir besoin d'utiliser un tableau séparé. Bien sûr, vous pouvez utiliser le tableau si vous le souhaitez, mais cela semble ajouter une complexité inutile.

def delete():
    selection = lb.curselection()
    if selection:
        index = selection[0]
        word = lb.get(index)
        print(f"word: '{word}'")

Remarque: l'utilisation de l'index "actif" n'est pas garantie d'être l'élément sélectionné. Il représente le curseur de sélection qui peut être indépendant de l'élément sélectionné.

Dans l'écran suivant, "trois" est ce que vous obtenez si vous utilisez "actif", même si "un" est l'élément sélectionné:

screenshot

1
Bryan Oakley 25 août 2020 à 14:04

Merci à tous les commentaires:

J'ai utilisé lb.index ("active"), et voici le code mis à jour:

def delete():
        selected = arr_allDesc[lb.index("active")]
        print(arr_allDesc[lb.index("active")])
        #Remove from array
        arr_allDesc.remove(selected)
        #Remove from window
        lb.delete(lb.curselection())
0
SCH 25 août 2020 à 07:31