Bonjour
j'ai un soucis avec l'affichage de treeview de python avec tkinter.
En effet, le treeview affiche le contenu de ma table sauf que l'affichage vient avec des caractères ' ' et des parenthèses.
Quelqu'un pourrait m'aider à régler cela?
Je vous envoi mon code et une capture de la présentation de mon treeview.
Merci d'avance§
from tkinter import *
from tkinter import messagebox, ttk
from tkcalendar import *
import database
import os
import tempfile
import pyodbc
from tkinter import ttk
class Salarie:
def __init__(self, root):
self.root = root
self.root.title("Gestion de paie")
self.root.geometry("1350x1080+0+0")
title = Label(self.root, text="Gestion de Paie", bd=10, relief=RAISED, font=('Algerian', 10), bg='cyan', fg='black')
title.pack(side=TOP, fill=X)
# Les variables
self.matricule= StringVar()
self.etablissement = StringVar()
self.nom = StringVar()
self.prenom = StringVar()
self.genre = StringVar()
self.mail = StringVar()
self.nationalite = StringVar()
self.situation = StringVar()
self.tel1 = StringVar()
self.tel2 = StringVar()
self.adresse = StringVar()
self.modePaie = StringVar()
self.crit1 = StringVar()
self.crit2 = StringVar()
self.crit3 = StringVar()
self.crit4 = StringVar()
self.crit5 = StringVar()
self.crit6 = StringVar()
self.crit7 = StringVar()
self.crit8 = StringVar()
self.crit9 = StringVar()
self.crit10 = StringVar()
self.crit11 = StringVar()
self.crit12 = StringVar()
self.varLibre1 = StringVar()
self.varLibre2 = StringVar()
self.varLibre3 = StringVar()
self.varLibre4 = StringVar()
self.varLibre5 = StringVar()
self.varLibre6 = StringVar()
self.varLibre7 = StringVar()
self.varLibre8 = StringVar()
self.observation = StringVar()
Frame0 = Frame(self.root, bd=2, relief=RIDGE)
Frame0.place(x=10, y=40, width=465, height=635)
title0 = Label(Frame0, text="Liste salarié", font=("times new roman", 10), bg="lightgray", fg="black")
title0.pack(side=TOP, fill=X)
detail_frame = Label(Frame0, text="Rechercher par:", font=("times new roman", 12), fg="black")
detail_frame.place(x=8, y=30)
rech = ttk.Combobox(Frame0, font=("times new roman", 12), state="readonly")
rech["values"]=("code", "nom", "prenom")
rech.place(x=110, y=30, width=100, height=25)
rech.current(0)
rech_txt = Entry(Frame0, font=("times new roman", 12), fg="black")
rech_txt.place(x=215, y=30, width=150, height=25)
btn_recher = Button(Frame0, text="Rechercher", font=("times new roman", 10, "bold"), bg="gray").place(x= 375, y=30)
btn_affichtout = Button(Frame0, text="Afficher tout", font=("times new roman", 10, "bold"), bg="gray").place(x=375, y=60)
#Affichage
result_frame = Frame(Frame0, bd=2, relief=RIDGE, bg="white")
result_frame.place(x=5, y=85, width=450, height=540)
scroll_x = Scrollbar(result_frame, orient=HORIZONTAL)
scroll_y = Scrollbar(result_frame, orient=VERTICAL)
self.tabl_result = ttk.Treeview(result_frame, columns=("code", "nom", "prenom"), xscrollcommand=scroll_x.set, yscrollcommand=scroll_y.set)
scroll_x.pack(side=BOTTOM, fill=X)
scroll_y.pack(side=RIGHT, fill=Y)
self.tabl_result.heading("code", text="Code", anchor=W)
self.tabl_result.heading("nom", text="Nom", anchor=W)
self.tabl_result.heading("prenom", text="Prénom(s)", anchor=W)
self.tabl_result["show"] = "headings"
self.tabl_result.column("code", anchor=W, width=80)
self.tabl_result.column("nom", anchor=W, width=150)
self.tabl_result.column("prenom", anchor=W, width=200)
self.tabl_result.pack()
self.tabl_result.bind("<ButtonRelease-1")
self.afficher_result()
Frame1 = Frame(self.root, bd=2, relief=RIDGE)
Frame1.place(x=480, y=40, width=850, height=635)
title2 = Label(Frame1, text="Informations salarié", font=("times new roman", 10), bg="lightgray")
title2.pack(side=TOP, fill=X)
Framecrit= Frame(self.root, bd=2, relief=RIDGE)
Framecrit.place(x=480, y=250, width=415, height=320)
critsimple = Label(Framecrit, text="critères simples", font=("times new roman", 9), fg="red")
critsimple.pack(side=TOP, fill=X)
Framecritx = Frame(self.root, bd=2, relief=RIDGE)
Framecritx.place(x=905, y=250, width=415, height=320)
critmultiple = Label(Framecritx, text="critères multiples", font=("times new romans", 9), fg="red")
critmultiple.pack(side=TOP, fill=X)
Frameimage = Frame(self.root, bd=2, relief=RIDGE)
Frameimage.place(x=1105, y=95, width=215, height=150)
lbl_matricule = Label(Frame1, text="Matricule", font=("times new roman", 12)).place(x=10, y=25)
lbl_etabl = Label(Frame1, text="Etablissement", font=("times new roman", 12)).place(x=10, y=55)
lbl_nom = Label(Frame1, text="Nom", font=("times new roman", 12)).place(x=10, y=80)
lbl_prenom = Label(Frame1, text="Prénom(s)", font=("times new roman", 12)).place(x=10, y=105)
lbl_genre = Label(Frame1, text="Genre", font=("times new roman", 12)).place(x=12, y=130)
lbl_mail = Label(Frame1, text="E_mail", font=("times new roman", 12)).place(x=12, y=155)
lbl_national = Label(Frame1, text="Nationnalité", font=("times new roman", 12)).place(x=10, y=180)
lbl_observation = Label(Frame1, text="Observations", font=("times new roman", 12)).place(x=10, y=530)
lbl_situation = Label(Frame1, text="Situation familiale", font=("times new roman", 12)).place(x=310, y=55)
lbl_naissance = Label(Frame1, text="Date Naissance", font=("times new roman", 12)).place(x=310, y=80)
lbl_telephone1 = Label(Frame1, text="Téléphone 1", font=("times new roman", 12)).place(x=310, y=105)
lbl_telephone2 = Label(Frame1, text="Téléphone 2", font=("times new roman", 12)).place(x=310, y=130)
lbl_adress = Label(Frame1, text="Adresse", font=("times new roman", 12)).place(x=310, y=155)
lbl_mode_paie = Label(Frame1, text="Mode paiement", font=("times new roman", 12)).place(x=310, y=180)
lbl_varlibre1 = Label(Frame1, text="VarLibre1", font=("times new roman", 12)).place(x=355, y=530)
lbl_varlibre2 = Label(Frame1, text="VarLibre2", font=("times new roman", 12)).place(x=355, y=555)
lbl_varlibre3 = Label(Frame1, text="VarLibre3", font=("times new roman", 12)).place(x=355, y=580)
lbl_varlibre4 = Label(Frame1, text="VarLibre4", font=("times new roman", 12)).place(x=355, y=600)
lbl_varlibre5 = Label(Frame1, text="VarLibre5", font=("times new roman", 12)).place(x=600, y=530)
lbl_varlibre6 = Label(Frame1, text="VarLibre6", font=("times new roman", 12)).place(x=600, y=555)
lbl_varlibre7 = Label(Frame1, text="VarLibre7", font=("times new roman", 12)).place(x=600, y=580)
lbl_varlibre8 = Label(Frame1, text="VarLibre8", font=("times new roman", 12)).place(x=600, y=600)
lbl_photo = Label(Frame1, text="Photo d'identité", font=("times new roman", 12)).place(x=625, y=25)
lbl_crit1 = Label(Framecrit, text="Critère 1", font=("times new roman", 12)).place(x=10, y=17)
lbl_crit2 = Label(Framecrit, text="Critère 2", font=("times new roman", 12)).place(x=10, y=42)
lbl_crit3 = Label(Framecrit, text="Critère 3", font=("times new roman", 12)).place(x=10, y=67)
lbl_crit4 = Label(Framecrit, text="Critère 4", font=("times new roman", 12)).place(x=10, y=92)
lbl_crit5 = Label(Framecrit, text="Critère 5", font=("times new roman", 12)).place(x=10, y=117)
lbl_crit6 = Label(Framecrit, text="Critère 6", font=("times new roman", 12)).place(x=10, y=142)
lbl_crit7 = Label(Framecrit, text="Critère 7", font=("times new roman", 12)).place(x=10, y=166)
lbl_crit8 = Label(Framecrit, text="Critère 8", font=("times new roman", 12)).place(x=10, y=192)
lbl_crit9 = Label(Framecrit, text="Critère 9", font=("times new roman", 12)).place(x=10, y=217)
lbl_crit10 = Label(Framecrit, text="Critère 10", font=("times new roman", 12)).place(x=10, y=242)
lbl_crit11 = Label(Framecrit, text="Critère 11", font=("times new roman", 12)).place(x=10, y=267)
lbl_crit12 = Label(Framecrit, text="Critère 12", font=("times new roman", 12)).place(x=10, y=292)
self.matricule = Entry(Frame1, textvariable=self.matricule, font=('times new roman', 10), bg="lightyellow")
self.matricule.place(x=115, y=25, width=100)
self.etablissement = ttk.Combobox(Frame1, textvariable=self.etablissement, font=('times new roman', 10), state="readonly")
self.etablissement["values"] = (1,2,3)
self.etablissement.place(x=115, y=55, width=175)
self.etablissement.current(0)
self.nom = Entry(Frame1, textvariable=self.nom, font=('times new roman', 10), bg="lightyellow")
self.nom.place(x=115, y=80, width=175)
self.prenom = Entry(Frame1, textvariable=self.prenom, font=('times new roman', 10), bg="lightyellow")
self.prenom.place(x=115, y=105, width=175)
self.genre = ttk.Combobox(Frame1, textvariable=self.genre, font=('time new roman', 10), state="readonly")
self.genre["values"] = (1,2)
self.genre.place(x=115, y=130, width=175)
self.genre.current(0)
self.mail = Entry(Frame1, textvariable=self.mail, font=('E_mail', 10), bg="lightyellow")
self.mail.place(x=115, y=155, width=175)
self.nationalite = ttk.Combobox(Frame1, textvariable=self.nationalite, font=('time new roman', 10), state="readonly")
self.nationalite["values"] = (1,2,3,4)
self.nationalite.place(x=115, y=180, width=175)
self.nationalite.current(0)
self.observation = Text(Frame1, font=("time new roman", 10), bg="lightyellow")
self.observation.place(x=115, y=540, width=230, height=90)
self.situation = ttk.Combobox(Frame1, textvariable=self.situation, font=('time new roman', 10), state="readonly")
self.situation["values"] = (1,2,3,4)
self.situation.place(x=440, y=55, width=175)
self.situation.current(0)
self.ecri_date = DateEntry(Frame1, font=("time new roman", 10), bg="lightyellow", state="readonly", locale='fr_FR', date_pattern = 'dd/mm/yyyy')
self.ecri_date.place(x=440, y=80, width=175)
self.tel1 = Entry(Frame1,textvariable=self.tel1, font=("time new roman", 10), bg="lightyellow")
self.tel1.place(x=440, y=105, width=175)
self.tel2 = Entry(Frame1, textvariable=self.tel2, font=("time new roman", 10), bg="lightyellow")
self.tel2.place(x=440, y=130, width=175)
self.adresse = Entry(Frame1, textvariable=self.adresse, font=("time new roman", 10), bg="lightyellow")
self.adresse.place(x=440, y=155, width=175)
self.modePaie = ttk.Combobox(Frame1, textvariable=self.modePaie, font=('time new roman', 10), state="readonly")
self.modePaie["values"] = (1,2,3,4,5)
self.modePaie.place(x=440, y=180, width=175)
self.modePaie.current(0)
self.crit1 = ttk.Combobox(Framecrit, textvariable=self.crit1, font=('time new roman', 10), state="readonly")
self.crit1["values"] = (1,2,3,4,5)
self.crit1.place(x=170, y=20, width=240)
self.crit1.current(0)
self.crit2 = ttk.Combobox(Framecrit, textvariable=self.crit2, font=('time new roman', 10), state="readonly")
self.crit2["values"] = (1,2,3,4,5)
self.crit2.place(x=170, y=45, width=240)
self.crit2.current(0)
self.crit3 = ttk.Combobox(Framecrit, textvariable=self.crit3, font=('time new roman', 10), state="readonly")
self.crit3["values"] = (1,2,3,4,5)
self.crit3.place(x=170, y=70, width=240)
self.crit3.current(0)
self.crit4 = ttk.Combobox(Framecrit, textvariable=self.crit4, font=('time new roman', 10), state="readonly")
self.crit4["values"] = (1,2,3,4,5)
self.crit4.place(x=170, y=95, width=240)
self.crit4.current(0)
self.crit5 = ttk.Combobox(Framecrit, textvariable=self.crit5, font=('time new roman', 10), state="readonly")
self.crit5["values"] = (1,2,3,4,5)
self.crit5.place(x=170, y=120, width=240)
self.crit5.current(0)
self.crit6 = ttk.Combobox(Framecrit, textvariable=self.crit6, font=('time new roman', 10), state="readonly")
self.crit6["values"] = (1,2,3,4,5)
self.crit6.place(x=170, y=145, width=240)
self.crit6.current(0)
self.crit7 = ttk.Combobox(Framecrit, textvariable=self.crit7, font=('time new roman', 10), state="readonly")
self.crit7["values"] = (1,2,3,4,5)
self.crit7.place(x=170, y=170, width=240)
self.crit7.current(0)
self.crit8 = ttk.Combobox(Framecrit, textvariable=self.crit8, font=('time new roman', 10), state="readonly")
self.crit8["values"] = (1,2,3,4,5)
self.crit8.place(x=170, y=195, width=240)
self.crit8.current(0)
self.crit9 = ttk.Combobox(Framecrit, textvariable=self.crit9, font=('time new roman', 10), state="readonly")
self.crit9["values"] = (1,2,3,4,5)
self.crit9.place(x=170, y=220, width=240)
self.crit9.current(0)
self.crit10 = ttk.Combobox(Framecrit, textvariable=self.crit10, font=('time new roman', 10), state="readonly")
self.crit10["values"] = (1,2,3,4,5)
self.crit10.place(x=170, y=245, width=240)
self.crit10.current(0)
self.crit11 = ttk.Combobox(Framecrit, textvariable=self.crit11, font=('time new roman', 10), state="readonly")
self.crit11["values"] = (1,2,3,4,5)
self.crit11.place(x=170, y=270, width=240)
self.crit11.current(0)
self.crit12 = ttk.Combobox(Framecrit, textvariable=self.crit12, font=('time new roman', 10), state="readonly")
self.crit12["values"] = (1,2,3,4,5)
self.crit12.place(x=170, y=295, width=240)
self.crit12.current(0)
self.varLibre1 = Entry(Frame1, textvariable=self.varLibre1, font=('times new roman', 10), bg="lightyellow")
self.varLibre1.place(x=445, y=535, width=140)
self.varLibre2 = Entry(Frame1, textvariable=self.varLibre2, font=('times new roman', 10), bg="lightyellow")
self.varLibre2.place(x=445, y=562, width=140)
self.varLibre3 = Entry(Frame1, textvariable=self.varLibre3, font=('times new roman', 10), bg="lightyellow")
self.varLibre3.place(x=445, y=585, width=140)
self.varLibre4 = Entry(Frame1, textvariable=self.varLibre4, font=('times new roman', 10), bg="lightyellow")
self.varLibre4.place(x=445, y=608, width=140)
self.varLibre5 = Entry(Frame1, textvariable=self.varLibre5, font=('times new roman', 10), bg="lightyellow")
self.varLibre5.place(x=700, y=535, width=140)
self.varLibre6 = Entry(Frame1, textvariable=self.varLibre6, font=('times new roman', 10), bg="lightyellow")
self.varLibre6.place(x=700, y=562, width=140)
self.varLibre7 = Entry(Frame1, textvariable=self.varLibre7, font=('times new roman', 10), bg="lightyellow")
self.varLibre7.place(x=700, y=585, width=140)
self.varLibre8 = Entry(Frame1, textvariable=self.varLibre8, font=('times new roman', 10), bg="lightyellow")
self.varLibre8.place(x=700, y=608, width=140)
btn_ajout = Button( text="Ajouter", command=self.ajout_salarie, font=("times new roman", 10, "bold"),relief=GROOVE, bg="green").place(x=11, y=675)
btn_modif = Button(text="Modifier", font=("times new roman", 10, "bold"),relief=GROOVE, bg="yellow").place(x=75, y=675)
btn_suppr = Button(text="Supprimer", font=("times new roman", 10, "bold"),relief=GROOVE, bg="red").place(x=145, y=675)
btn_reini = Button(text="Réinitialiser", font=("times new roman", 10, "bold"),relief=GROOVE, bg="blue").place(x=225, y=675)
def reini(self):
self.matricule.delete(0, END)
self.etablissement.delete(0, END)
self.nom.delete(0, END)
self.prenom.delete(0, END)
self.genre.delete(0, END)
self.mail.delete(0, END)
self.nationalite.delete(0, END)
self.situation.delete(0, END)
self.ecri_date.set_date("03/03/2022")
self.tel1.delete(0, END)
self.tel2.delete(0, END)
self.adresse.delete(0, END)
self.modePaie.delete(0, END)
self.crit1.delete(0, END)
self.crit2.delete(0, END)
self.crit3.delete(0, END)
self.crit4.delete(0, END)
self.crit5.delete(0, END)
self.crit6.delete(0, END)
self.crit7.delete(0, END)
self.crit8.delete(0, END)
self.crit9.delete(0, END)
self.crit10.delete(0, END)
self.crit11.delete(0, END)
self.crit12.delete(0, END)
self.varLibre1.delete(0, END)
self.varLibre2.delete(0, END)
self.varLibre3.delete(0, END)
self.varLibre4.delete(0, END)
self.varLibre5.delete(0, END)
self.varLibre6.delete(0, END)
self.varLibre7.delete(0, END)
self.varLibre8.delete(0, END)
self.observation.delete("1.0", "end")
def ajout_salarie(self):
if self.matricule.get() == "" or self.nom.get() == "" or self.prenom.get() == "":
messagebox.showerror("Attention:", "Vous n'avez pas rempli les champs obligatoires", parent=self.root)
else:
try:
cursor = database.conn.cursor()
cursor.execute("select* from salarie where matricule=?", self.ecri_date.get())
row = cursor.fetchone()
if row != None:
messagebox.showerror("Erreur:", "Cette données existe déjà", parent=self.root)
else:
cursor.execute(
"INSERT INTO salarie(Matricule,Etabl,Nom,Prenoms,Sexe,PaysNationalite,Email,SituationFamiliale,DateNaissance,"
"Telephone1,Telephone2, Adresse,ModePaiement,Crit1,Crit2,Crit3,Crit4,Crit5,Crit6,Crit7,Crit8"
",Crit9,Crit10,Crit11,Crit12,VarLibre1,VarLibre2,VarLibre3,VarLibre4,VarLibre5,VarLibre6,VarLibre7,VarLibre8,ObSalarie) "
"values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)",
(self.matricule.get(), self.etablissement.get(), self.nom.get(), self.prenom.get(), self.genre.get(),
self.nationalite.get(), self.mail.get(), self.situation.get(), self.ecri_date.get(), self.tel1.get(),
self.tel2.get(), self.adresse.get(), self.modePaie.get(), self.crit1.get(), self.crit2.get(),
self.crit3.get(), self.crit4.get(), self.crit5.get(), self.crit6.get(), self.crit7.get(),
self.crit8.get(), self.crit9.get(), self.crit10.get(), self.crit11.get(), self.crit12.get(),
self.varLibre1.get(), self.varLibre2.get(), self.varLibre3.get(), self.varLibre4.get(),
self.varLibre5.get(), self.varLibre6.get(), self.varLibre7.get(), self.varLibre8.get(), self.observation.get("1.0", END)))
database.conn.commit()
self.afficher_result()
#database.conn.close()
messagebox.showinfo("Salarié enregistré avec succès")
self.reini()
except Exception as es:
messagebox.showerror("Erreur:", f" {str(es)}", parent=self.root)
def afficher_result(self):
cursor = database.conn.cursor()
cursor.execute("select matricule, nom, prenoms from salarie")
rows = cursor.fetchall()
if len(rows) != 0:
self.tabl_result.delete(* self.tabl_result.get_children())
for row in rows:
self.tabl_result.insert("", END, values=row)
database.conn.commit()
#database.conn.close()
root = Tk()
obj = Salarie(root)
root.mainloop()
Afficher la suite
12 mars 2023 à 17:21
Bonjour
je vous envoi mon module database ici.
Mais ma requête de sélection
fonctionne bien dans sql.
Seulement c'est la présentation du tableau de liste qui se présente pas bien.
Il des caractères supplémentaires qui viennent s'ajouter.
Cordialement,
12 mars 2023 à 23:31
Ce qui confirme l'analyse de hystouar en #2: tes données ne sont pas enregistrées comme tu le souhaites dans ta base de données.
16 mars 2023 à 09:58
Bonjour
quand je fait un simple print le résultat s'affiche correctement.
Mais dans le tableau le résultat n'est pas correct.
je vous envoi une image de print row
w dans ce message.
Merci d'avance.
16 mars 2023 à 10:05
Bonjour
je constate par exemple un affichage avec une autre base de données.
je ne comprend pas pourquoi mes valeurs du treeview sont entre parenthèse et griffe et séparées par des virgules.
isadama
16 mars 2023 à 10:30
Partage la source du programme qui fait ce print().