Adding stock display
This commit is contained in:
parent
78c91d1b7e
commit
5482c0d761
3 changed files with 93 additions and 8 deletions
BIN
img/defaut.gif
Normal file
BIN
img/defaut.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 1.7 KiB |
88
main.py
88
main.py
|
@ -1,6 +1,6 @@
|
||||||
import tkinter.messagebox as messagebox
|
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 re import sub
|
||||||
|
|
||||||
from users import Utilisateurs # import de mon fichier pour gérer la base de donnée
|
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
|
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)
|
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)
|
ticket.grid(column=1, row=1)
|
||||||
Label(ticket, text="TODO").grid()
|
Label(ticket, text="TODO").grid()
|
||||||
|
|
||||||
|
@ -367,11 +439,11 @@ class GesMag:
|
||||||
# Liste des utilisateurs
|
# Liste des utilisateurs
|
||||||
Label(enfant, text=f"Liste des {'manager' if metier == 0 else 'caissier'}", font=self.font).grid(column=0, row=0) # titre
|
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
|
# 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")
|
scroll_retirer.grid(column=1, row=1, sticky="nse")
|
||||||
# On définit notre liste et on la lie à notre `Scrollbar`
|
# On définit notre liste et on la lie à notre `Scrollbar`
|
||||||
listeUtilisateurs_retirer = Listbox(enfant, width=25, height=4, yscrollcommand=scroll_retirer.set)
|
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
|
# On ajoute nos utilisateurs à notre liste
|
||||||
__ajouterUtilisateursListe(listeUtilisateurs_retirer, metier)
|
__ajouterUtilisateursListe(listeUtilisateurs_retirer, metier)
|
||||||
listeUtilisateurs_retirer.grid(column=0, row=1)
|
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
|
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
|
# 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")
|
scroll.grid(column=0, row=5, sticky="nse")
|
||||||
# On définit notre liste et on la lie à notre `Scrollbar`
|
# On définit notre liste et on la lie à notre `Scrollbar`
|
||||||
listeUtilisateurs = Listbox(self.f, width=25, height=4, yscrollcommand=scroll.set)
|
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
|
# On ajoute nos utilisateurs à notre liste
|
||||||
__ajouterUtilisateursListe(listeUtilisateurs)
|
__ajouterUtilisateursListe(listeUtilisateurs)
|
||||||
listeUtilisateurs.grid(column=0, row=5)
|
listeUtilisateurs.grid(column=0, row=5)
|
||||||
|
|
13
test.py
Normal file
13
test.py
Normal file
|
@ -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()
|
Reference in a new issue