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 :
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
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()
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 ?
Partager