Selectionner une liste dans treeview pour la supprimer dans

Fermé
Gret6Grek Messages postés 3 Date d'inscription samedi 13 août 2022 Statut Membre Dernière intervention 14 août 2022 - 13 août 2022 à 22:09
 regglyss - 14 août 2022 à 15:44
Bonsoir! Je developpe une application de gestion de Que j'ai creer un treeview pour afficher les clients ajouter à ma liste dauf que ma seule probleme est que je veux que si je selection Une liste dans la table je veux directement supprimer la liste dans ma base de données. Comment faire?

4 réponses

yg_be Messages postés 22731 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 27 avril 2024 1 477
13 août 2022 à 22:11

bonjour,

peux-tu montrer ton code?

0
Gret6Grek Messages postés 3 Date d'inscription samedi 13 août 2022 Statut Membre Dernière intervention 14 août 2022
Modifié le 13 août 2022 à 22:36

C'est le code ça:

 
from subprocess import call
from tkinter import *
from tkinter.messagebox import showerror
from tkinter.ttk import Entry, Treeview
import mysql.connector
import datetime 

title = 'G-Client'

def on_enter(e):
    ajout_browse['bg'] = '#1b1a1a'
def on_leave(e):
    ajout_browse['bg'] = '#2699ad'
def on_ente(e):
    edit_browse['bg'] = '#1b1a1a'
def on_leav(e):
    edit_browse['bg'] = '#2699ad'
def on_ent(e):
    delete_browse['bg'] = '#1b1a1a'
def on_lea(e):
    delete_browse['bg'] = '#2699ad'
def on_en(e):
    print_browse['bg'] = '#1b1a1a'
def on_le(e):
    print_browse['bg'] = '#2699ad'


def Ajouter():
    name = name_client_entry.get()
    mail = client_mail_entry.get()
    tel = client_tel_entry.get()
    pays = client_country_entry.get()
    province = client_province_entry.get()
    maBase = mysql.connector.connect(host='localhost', user='root', password='netlech',database='client')
    meConnecter = maBase.cursor()
    try:
        sql = "INSERT INTO g_client(Name, Email, Tel, Pays, Province,Date) VALUES (%s,%s,%s,%s,%s,%s)"
        date = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        val = (name, mail, tel, pays, province, date)
        meConnecter.execute(sql, val)
        maBase.commit()
        windows.destroy()
        call(['python', 'ajout.py'])
    except Exception as e:
        showerror("Error", f"error {e}")
def delete():
    maBase = mysql.connector.connect(host='localhost', user='root', password='netlech',database='client')
    meConnecter = maBase.cursor()
    
    try:
        name = name_client_entry.get()
        sql = "DELETE FROM g_client WHERE name = %s"
        val = (name, )
        meConnecter.execute(sql,val)
        maBase.commit()
        windows.destroy()
        call(['python', 'ajout.py'])
    except Exception as e:
            showerror("Error", f"error {e}")

windows =Tk()
windows.geometry("900x500")
windows.title(f"Ajouter un client  {title}")
windows.state('zoomed')

menu_bar = Menu(windows)
file_menu = Menu(menu_bar, tearoff=0)
file_menu.add_command(label="Ajouter un client")
file_menu.add_command(label="Editer un client")
file_menu.add_command(label='supprimer un client')
file_menu.add_separator()
file_menu.add_command(label='Contacter un client')
file_menu.add_separator()
file_menu.add_command(label='Nouvelle fenêtre')
file_menu.add_separator()
file_menu.add_command(label='Quittez')
menu_bar.add_cascade(label="File", menu=file_menu)

option_menu = Menu(menu_bar, tearoff=0)
option_menu.add_command(label="Paramètres")
option_menu.add_command(label="Enregistré G-Client")
option_menu.add_command(label="Désenregistrer G-Client")
menu_bar.add_cascade(label="Options", menu=option_menu)

help_menu = Menu(menu_bar, tearoff=0)
help_menu.add_command(label="À propos de G-Client", accelerator='F1')
help_menu.add_command(label="Ouvrir le dossier d'installation de G-Client")
help_menu.add_separator()
help_menu.add_command(label="Désenregistrer G-Client")
menu_bar.add_cascade(label="Aide", menu=help_menu)


# :::::::::::::: Navigation menu top ::::::::::::::::::::
topframe = Frame(windows, width=1800, height=80, bg='#2699ad')
topframe.grid(sticky=NW, in_=windows, ipadx=800)
ajout_img = PhotoImage(file='assets/icon/edit_2.png').zoom(1)
ajout_browse =  Button(topframe, text="Ajouter", image=ajout_img,bd=0,
     compound=TOP, relief=SUNKEN,borderwidth=0, bg="#2699ad", fg='snow',
      activebackground='#131212', activeforeground='snow',command=Ajouter)
ajout_browse.grid(row=0, column=0, ipadx=20, ipady=15)
ajout_browse.bind("<Enter>", on_enter)
ajout_browse.bind("<Leave>", on_leave)


def Edit():
    call(["python", 'edit.py'])

edit_img = PhotoImage(file='assets/icon/list_2.png').zoom(1)
edit_browse =  Button(topframe, text="Editer", image=edit_img,bd=0, 
    activebackground='#131212',activeforeground='snow',
    compound=TOP, relief=SUNKEN, bg="#2699ad",fg="snow", command=Edit)
edit_browse.grid(row=0, column=1, ipadx=20, ipady=15, padx=1)
edit_browse.bind("<Enter>", on_ente)
edit_browse.bind("<Leave>", on_leav)

delete_img = PhotoImage(file='assets/icon/clear.png').zoom(1)
delete_browse =  Button(topframe, text="Supprimer", image=delete_img,bd=0, 
    activebackground='#131212',activeforeground='snow',
    compound=TOP, relief=SUNKEN, bg="#2699ad",fg="snow",command=delete)
delete_browse.grid(row=0, column=2, ipadx=20, ipady=15, padx=1)
delete_browse.bind("<Enter>", on_ent)
delete_browse.bind("<Leave>", on_lea)

print_img = PhotoImage(file='assets/icon/print.png').zoom(1)
print_browse =  Button(topframe, text="Imprimer la liste des clients", image=print_img,bd=0, 
    activebackground='#131212',activeforeground='snow',
    compound=TOP, relief=SUNKEN, bg="#2699ad",fg="snow")
print_browse.grid(row=0, column=3, ipadx=20, ipady=15, padx=1)
print_browse.bind("<Enter>", on_en)
print_browse.bind("<Leave>", on_le)

# ::::::::::::::::::::::::::::::::::

# ::::::::::::::: Affichage des items  du panedWindow left :::::::::::::::::::

panedLeft = PanedWindow(border=4, bg='#131212',borderwidth=0)
panedLeft.grid(sticky=NW)
leftframe = Frame(bg='#e2e2e2', width=50, height=10)

name_client_label = Label(leftframe, text='Nom du Client:', bg='#e2e2e2', font='system')
name_client_label.grid(row=0, column=0)
name_client_entry =  Entry(leftframe, font=('system'))
name_client_entry.grid(row=0, column=1, pady=10, padx=10, ipady=3, ipadx=2)

client_mail = Label(leftframe,text="Email:", font='system', bg='#e2e2e2')
client_mail.grid(row=1, column=0)
client_mail_entry =  Entry(leftframe, font=('system'))
client_mail_entry.grid(row=1, column=1, pady=10, padx=10, ipady=3, ipadx=2)

client_tel = Label(leftframe,text="Téléphone:", font='system', bg='#e2e2e2')
client_tel.grid(row=2, column=0)
client_tel_entry =  Entry(leftframe, font=('system'))
client_tel_entry.grid(row=2, column=1, pady=10, padx=10, ipady=3, ipadx=2)

client_country = Label(leftframe,text="Pays:", font='system', bg='#e2e2e2')
client_country.grid(row=3, column=0)
client_country_entry =  Entry(leftframe, font=('system'))
client_country_entry.grid(row=3, column=1, pady=10, padx=10, ipady=3, ipadx=2)

client_province = Label(leftframe,text="Province/Etat:", font='system', bg='#e2e2e2')
client_province.grid(row=4, column=0)
client_province_entry =  Entry(leftframe, font=('system'))
client_province_entry.grid(row=4, column=1, pady=10, padx=10, ipady=3, ipadx=2)



# def save():
#     from tkinter.ttk import Button
#     save = Button(leftframe, text="Ajouter le Client")
#     save.grid(row=5, column=0,sticky=E,ipadx=20,ipady=10, padx=40, pady=40)
# save()
panedLeft.add(leftframe)
# ::::::::::::::: :::::::::::::::::::
# ::::::::::::::: Afficher le nombre de client ajouter :::::::::::::::::::

nmbre_frame = Frame(windows, width=800, bg="#2699ad",bd=5,highlightthickness=2, 
    highlightbackground='#1e3336', highlightcolor="#1e3336")
nmbre_frame.grid(row=3, column=0, sticky=W, ipady=15, in_=windows, ipadx=283)

nbre_label = Label(nmbre_frame, text='Nombre de Client: 8', bg="#2699ad",fg="snow", font='system')
nbre_label.grid(row=0, column=0)

taille_label = Label(nmbre_frame, text='Taille: 4M', bg="#2699ad",fg="snow", font='system')
taille_label.grid(row=0, column=1, padx=309)

# ::::::::::::::: Affichage du treeview  :::::::::::::::::::
PanedRight = PanedWindow(windows, orient=VERTICAL)

from tkinter.ttk import Style

style = Style()
style.theme_use('clam')
table = Treeview(PanedRight, height=29,columns=(1, 2, 3, 4, 5,6), show='headings')
table.pack(fill=BOTH)
table.column(1, anchor=CENTER)
table.column(2, anchor=CENTER)
table.column(3, anchor=CENTER)
table.column(4, anchor=CENTER,width=90)
table.column(5, anchor=CENTER)
table.column(6, anchor=CENTER)
table.heading(1, text="Nom du client")
table.heading(2, text="Email")
table.heading(3, text="Téléphone")
table.heading(4, text="Pays")
table.heading(5, text="Province/Etat")
table.heading(6, text="Date et Heure")
panedLeft.add(PanedRight)
# ::::::::::::::: :::::::::::::::::::

#:::::::::::::::Création d'un base de donnée::::::::::::::::::::
maBase = mysql.connector.connect(host='localhost', user='root', password='netlech',database='client')
meConnecter = maBase.cursor()
meConnecter.execute('select * from g_client')

for row in meConnecter:
    table.insert('', END, values=row)
maBase.close()

#::::::::::::::::::::::::::::::::::::::::::


windows.config(bg="grey", menu= menu_bar)
mainloop()

EDIT : Déplacement du sujet dans le forum PYTHON

EDIT²: Ajout du LANGAGE dans les BALISES DE CODE 

0

Bonsoir,

Ce genre de chose :

call(['python', 'ajout.py'])

est une très mauvaise pratique.

En ce qui concerne ton souci, si j'ai bien saisi, il faut bien évidemment utiliser les événements du treeview, ils sont au nombre de 3 :
• Whenever there is a change in the selection, either by items becoming selected or becoming unselected, the widget generates a “<<TreeviewSelect>>” event.
• Whenever an item is opened, the widget generates a “<<TreeviewOpen>>” event.
• Whenever an item is closed, the widget generates a “<<TreeviewClose>>” event.

Pour ce que tu veux réaliser, ce serait sans doute le 1er ?

À utiliser dans la méthode bind de ton treeview évidemment =)

0
Gret6Grek Messages postés 3 Date d'inscription samedi 13 août 2022 Statut Membre Dernière intervention 14 août 2022
14 août 2022 à 00:03

Ok merci pour la reponse mais pour la methode selection pour selectionner sur la table et si j'appuie sur le bouton supprimer la liste selectionner doit supprimer sur la table de même dans la base de donnees

0

Bonjour, relis-toi avant de poster un message, ce que tu as écrit est incompréhensible.

Comme je t'ai indiqué, il faut donc utiliser un event sur ton treeview, dans la fonction reliée à l'événement, tu t'arranges pour récupérer la ligne sélectionnée, la méthode focus du treeview fera l'affaire, pour supprimer une ligne, la méthod delete. Pour récupérer les valeurs d'une ligne du treeview, la méthode item en passant comme option values.

0