From 5482c0d7617368e7aea3b470dbc56c1a4fcb6a9f Mon Sep 17 00:00:00 2001 From: Mylloon Date: Thu, 25 Nov 2021 18:01:05 +0100 Subject: [PATCH] Adding stock display --- img/defaut.gif | Bin 0 -> 1703 bytes main.py | 88 ++++++++++++++++++++++++++++++++++++++++++++----- test.py | 13 ++++++++ 3 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 img/defaut.gif create mode 100644 test.py diff --git a/img/defaut.gif b/img/defaut.gif new file mode 100644 index 0000000000000000000000000000000000000000..37787f349d3a3e488d9dba97b424fbceee5f01e9 GIT binary patch literal 1703 zcmc)J_d6R11Hkb_jqu_^uUa1Ot4+C!wyv#?Q9v>h7{Q2|X z;9x^T!?kPIl9Q9e!oqTMbDuta8Wa>HTbISh$IE20jEoEv3dQAeOG-<`;`!E=*7f!E z%*@QVxHzFuxV*f)va&*_({VW5g9i_)s;Z`EW}ZBGVrFKxCYAQ}^}T=perkHErltlC zhx_^Y4Gj%3nar-PF8R(*dU|?NQc?wvCy}gv`t+&0yL)(em`bI-c<~}MG}O`2abRFT zJTH!ojcsjf{T~+>m*>x)Pft&$rlgWcq=JG19*=eC}eVHXJ=z$V`OAxZEa0x zXvqEh_iJlwDHKX}c6L!w(W_UldU|>&l*E#flEcG;rlzLw@NgoLn3a{~=H?a<5D*d) zGCegVo||jnH`v?TvzW}~B?tpiTxarO<&tDuI5>wH9jVnR&cA z)jo#N)V~ri4#SZB($vpH%VqOt{l-Wzl5w%A%_6hf25w+UGN!Xl?6a;$Y}>3(K%ID~ zDu`So>&?F}gg9;z>`q?PGd_B~t)hu~`HRr7GXg;MYV-jxO?~|PbK8w=QA4y9747W6 zrphgi2rbU_i?c^V3jcG4MGnn_`c~B4po}OPv~}_DbYW2}SaWwX?#n-JCLCR5S}Xr; zaHKKU{-PuI?%O}d|7HH|yB_XF@;^zcIt*ZdG)m{vBLQEx$&U$5(q>_T46Rw)b}9sc zdK5g98XY#g`{|xiTC~{Va#S%*?V!~V zH6sn41WW(XH^u__lZk|lIKQ}oD~H{cSGnftl#dShh)l9qbr^izKXp3*^W>idTnGpD ztMU~uy(^%x6KoY?Mj5`_4cn7bbMr%OhPS1Q<`bSQn|UfbWn!)h45&f~i6$<^87EHd z^peyA+XI#RPz&y8QH-%F(Q;`QZfg0yb48Qi*O@p7a-dzcFaS;OB0T>7)o~IM9rsoKh8VSFC-<VoEHl` z$sY};djWr;X|pERNaonN91(`vl4b#256TeMM8u{2zTAHPGty}6=&-MIYnedr72b-> ny9S#Vs>7>LdXME7=)eIT4G*8ew%K}P4CFu7j(95|5OCwaI{P!b literal 0 HcmV?d00001 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()