diff --git a/img/defaut.gif b/img/defaut.gif new file mode 100644 index 0000000..37787f3 Binary files /dev/null and b/img/defaut.gif differ diff --git a/main.py b/main.py index aa3936e..18de256 100644 --- a/main.py +++ b/main.py @@ -1,6 +1,6 @@ import tkinter.messagebox as messagebox -from tkinter import IntVar, Checkbutton, LabelFrame, Scrollbar, Listbox, Entry, Button, Label, Frame, Tk, Toplevel +from tkinter import IntVar, Checkbutton, LabelFrame, PhotoImage, Scrollbar, Listbox, Entry, Button, Label, Frame, Tk, Toplevel from re import sub from users import Utilisateurs # import de mon fichier pour gérer la base de donnée @@ -198,11 +198,83 @@ class GesMag: Label(self.f, text="Interface Caissier", font=(self.font[0], 20)).grid(column=0, row=0) # titre de l'interface - stock = LabelFrame(self.f, text="Stock") # partie affichage du stock + # Partie affichage du Stock + stock = LabelFrame(self.f, text="Stock") stock.grid(column=0, row=1) - Label(stock, text="TODO").grid() - ticket = LabelFrame(self.f, text="Ticket de caisse") # partie affichage du ticket de caisse + def __affichageTableau(stockListe: list, parent: Frame, page: int = 1): + """Fonction qui va actualiser le tableau avec une page donnée.""" + # On supprime et refais la frame qui va stocker notre tableau + parent.destroy() + parent = Frame(stock) + parent.grid(column=0, row=1, columnspan=6) + + ecart = 10 # écart entre les champs + + elementsParPage = 10 # on définit combien d'élément une page peut afficher au maximum + pageMax = -(-len(stockListe) // elementsParPage) # on définit combien de page il y au maximum + + if pageMax <= 1: + page = 1 # on force la page à être à 1 si il n'y a qu'une page, peut importe l'argument donnée à la fonction + + limiteIndex = elementsParPage * page # on définit une limite pour ne pas afficher plus d'éléments qu'il n'en faut par page + if len(stockListe) > 0: # si stock non vide + # Définition des colonnes + Label(parent, text="ID").grid(column=0, row=0, padx=ecart) + Label(parent, text="Image").grid(column=1, row=0, padx=ecart) + Label(parent, text="Type").grid(column=2, row=0, padx=ecart) + Label(parent, text="Nom").grid(column=3, row=0, padx=ecart) + Label(parent, text="Quantité").grid(column=4, row=0, padx=ecart) + Label(parent, text="Prix unité (€)").grid(column=5, row=0, padx=ecart) + + curseur = limiteIndex - elementsParPage # on commence à partir du curseur + i = 1 # on commence à 1 car il y a déjà le nom des colonnes en position 0 + images = [] # liste qui va stocker nos images + for element in stockListe[curseur:limiteIndex]: # on ignore les éléments avant le curseur et après la limite + Label(parent, text=element["id"]).grid(column=0, row=i) + + """ + L'idée est que on a une liste `images` qui permet de stocker toutes nos images + (c'est une limitation de tkinter que de garder nos images en mémoire) + Une fois ajouté à la liste, on l'affiche dans notre Label + """ + try: # on essaie d'ouvrir l'image + open(element["image_url"], "r") + images.append(PhotoImage(file = element["image_url"])) + except FileNotFoundError: # si l'image n'existe pas + images.append(PhotoImage(file = "img/defaut.gif")) + print(images[i - 1].name) + Label(parent, image=images[i - 1]).grid(column=1, row=i) + + Label(parent, text=element["type"]).grid(column=2, row=i) + Label(parent, text=element["nom"]).grid(column=3, row=i) + Label(parent, text=element["quantite"]).grid(column=4, row=i) + Label(parent, text=element["prix"]).grid(column=5, row=i) + # Label(parent, text=element['type']).grid(column=0, row=i+2) + curseur += 1 + i += 1 + + # Information sur la page actuelle + Label(parent, text=f"Page {page}/{pageMax}").grid(column=2, row=i, columnspan=2) + + # Boutons + precedent = Button(parent, text="Page précédente", command=lambda: __affichageTableau(stockListe, parent, page - 1)) + precedent.grid(column=0, row=i, columnspan=2) + suivant = Button(parent, text="Page suivante", command=lambda: __affichageTableau(stockListe, parent, page + 1)) + suivant.grid(column=4, row=i, columnspan=2) + if page == 1: # si on est a la première page on désactive le boutton précédent + precedent.config(state="disabled") + if page == pageMax: # si on est a la dernière page on désactive le boutton suivant + suivant.config(state="disabled") + else: + Label(parent, text="Il n'y a rien en stock").grid(column=0, row=0, columnspan=6) + + elementsEnStock = Stock().listeStocks() # stock récupéré de la base de données + tableau = Frame(stock) + __affichageTableau(elementsEnStock, tableau) + + # Partie affichage du ticket de caisse + ticket = LabelFrame(self.f, text="Ticket de caisse") ticket.grid(column=1, row=1) Label(ticket, text="TODO").grid() @@ -367,11 +439,11 @@ class GesMag: # Liste des utilisateurs Label(enfant, text=f"Liste des {'manager' if metier == 0 else 'caissier'}", font=self.font).grid(column=0, row=0) # titre # On définit une barre pour pouvoir scroller dans la liste - scroll_retirer = Scrollbar(enfant, orient="vertical") + scroll_retirer = Scrollbar(enfant) scroll_retirer.grid(column=1, row=1, sticky="nse") # On définit notre liste et on la lie à notre `Scrollbar` listeUtilisateurs_retirer = Listbox(enfant, width=25, height=4, yscrollcommand=scroll_retirer.set) - scroll_retirer["command"] = listeUtilisateurs_retirer.yview # scroll à la verticale dans notre liste + scroll_retirer.config(command=listeUtilisateurs_retirer.yview) # scroll à la verticale dans notre liste # On ajoute nos utilisateurs à notre liste __ajouterUtilisateursListe(listeUtilisateurs_retirer, metier) listeUtilisateurs_retirer.grid(column=0, row=1) @@ -483,11 +555,11 @@ class GesMag: Label(self.f, text="Liste des utilisateurs", font=self.font).grid(column=0, row=4) # titre # On définit une barre pour pouvoir scroller dans la liste - scroll = Scrollbar(self.f, orient="vertical") + scroll = Scrollbar(self.f) scroll.grid(column=0, row=5, sticky="nse") # On définit notre liste et on la lie à notre `Scrollbar` listeUtilisateurs = Listbox(self.f, width=25, height=4, yscrollcommand=scroll.set) - scroll["command"] = listeUtilisateurs.yview # scroll à la verticale dans notre liste + scroll.config(command=listeUtilisateurs.yview) # scroll à la verticale dans notre liste # On ajoute nos utilisateurs à notre liste __ajouterUtilisateursListe(listeUtilisateurs) listeUtilisateurs.grid(column=0, row=5) diff --git a/test.py b/test.py new file mode 100644 index 0000000..cf2e5b9 --- /dev/null +++ b/test.py @@ -0,0 +1,13 @@ +from tkinter import * + +ws = Tk() +frame = Frame(ws) +x = Frame(frame) +imgs = [] +for i in range(0, 10): + imgs.append(PhotoImage(file='img/defaut.gif')) + Label(x, image=imgs[i]).grid() + +x.grid() +frame.grid() +ws.mainloop()