Bonjour,

J'ai une liste, lorsque je rajoute un item dans cette liste, je veut qu'elle s'enregistre et mette à jour la liste déroulante sans avoir besoin de fermer puis ré-ouvrir la fenêtre principale.
Ce code fonctionne :
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
import tkinter.ttk as ttk
from tkinter import *
import pickle
import os.path
 
def foncMiseAJour():
    print("Liste actuelle : " + str(lst))            # ancienne liste
    a=objNewItem.get()
    print("Valeur ajoutée : " + a)                   # Le rajout
    #   Ajout de a dans la list lst
    lst.append(a)
    #########################
    # Save
    #########################
    with open (NOMFIC, "wb") as fichier:
        pickle.dump (lst, fichier)
    # Verif
    print("Liste nouvelle : " + str(lst))            # Nouvelle liste
    objListDeroul.configure(values=lst)              # Mise a jour liste déroulante
 
#   ____________________________________________________________________________________________________________________
#   MAIN
#   ____________________________________________________________________________________________________________________
#   Chemin d'accès et initialisation de la liste
NOMFIC = "toto"                                     # Nom du fichier
lst = []
#########################
# Load
#########################
#  Verif que le fichier existe
if os.path.exists(NOMFIC):
    # Existe, on le lit
    with open (NOMFIC, "rb") as fichier:
        lst = pickle.load (fichier)
else:
    #   Existe pas : on le crée
    with open (NOMFIC, "wb") as fichier:
        pickle.dump (lst, fichier)
#   Création fenêtre fen1
fen1 = Tk()
fen1.configure(bg = "Light Steel Blue")
#  Création de la liste déroulante
objListDeroul = ttk.Combobox(fen1, values=lst, width=24)  # Récup des valeurs : logging
#   Création Entry
objNewItem = Entry(fen1)
#   Création bouton validation
objValid =Button(fen1, text="Validation", command= foncMiseAJour)
#   positionnement des objets
objListDeroul.pack()
objNewItem.pack(pady=10)
objValid.pack()
#   Réception d'événements
fen1.mainloop()
Mais quand je le retranscrit dans mon programme j'ai ce message d'erreur que je ne comprends pas :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Users\jm.aix\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1699, in __call__
    return self.func(*args)
  File "C:/0_Les_Codes/0_Codes_Menu_en_cours.py", line 509, in foncBoutNewValid
    objListDeroul.configure (values=gens2)
  File "C:\Users\jm.aix\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1479, in configure
    return self._configure('configure', cnf, kw)
  File "C:\Users\jm.aix\AppData\Local\Programs\Python\Python37-32\lib\tkinter\__init__.py", line 1470, in _configure
    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))
_tkinter.TclError: invalid command name ".!labelframe2.!labelframe.!combobox"

Voici la partie de mon code qui gère l'enregistrement sinon je mettrais le code entier mais il y a plus de 1000 lignes :
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
#   ____________________________________________________________________________________________________________________
#   Fonction de validation de création de nouvelle fiche
def foncBoutNewValid():
    """ Bouton de validation permettant de créer une nouvelle fiche"""
    #       Récupération des données de la fenêtre NEW (création d'un nouveau code)
    prenom = ObjNewNom.get()
    nomfami = ObjNewCode.get()
    datenaiss = objNewRenseig.get()
    #   Récupération de la case à cocher
    if varTruqueeO_N2.get():
        courriel ="Oui"  # Coché
    else:
        courriel ="Non"  # Pas coché
    #   Vérification 1 - log ou code vide
    if prenom=="" or nomfami=="":
        titre = "ALERTE !"
        msg="Vous n'avez rien indiqué dans \n la case LOGGING ou dans la case CODE !"
        btMsgBox(msg, titre)
        return
     #   Vérification 2 - Logging existe déja
    for e in gens:
        if prenom == e[2]:
            titre = "ALERTE !"
            msg = "Le logging : " + e[2] +  " existe déja !"
            btMsgBox(msg, titre)
            return
    #   Création du msg de création
    titre = "INFORMATION !"
    msg = "Nouvelle fiche crée pour : \n La liste N° " + str(varNumList)  + "( " + str(varNomList) + ") \n Logging : " + prenom + "\n nomfami : " + nomfami + "\n Renseignement : "  + datenaiss + "\nTruqué (O/N) : " +   str(courriel)
    btMsgBox(msg, titre)
    #   Concatenation des listes
    fiche_nouvo=[varNumList, varNomList, prenom, nomfami, datenaiss, courriel]
    gens.append (fiche_nouvo)
    #   Trie de la liste par logging [2]
    gens2 = sorted (gens, key=lambda gens: gens[2])
    #  Enregistrement
    with open (NOMFIC, "wb") as fichier:
        pickle.dump (gens2, fichier)
 
    print(gens2)
    objListDeroul.configure (values=gens2) # C'est là que ça ne veut pas

Si quelqu'un peut m'aider ?