- Fixes some errors when switching between GUIs

- Change Manager GUI dimensions
- Add button for adding an user (not implemented yet)
- Add button for removing an user (not implemented yet)
- Add the list of all the users, adding the scrollbar connected to it and print data on the double-clicked user
This commit is contained in:
Mylloon 2021-11-20 02:40:02 +01:00
parent 39d058358b
commit 0bc7ec7433

63
main.py
View file

@ -1,6 +1,6 @@
import tkinter.messagebox as messagebox import tkinter.messagebox as messagebox
from tkinter import Tk, Frame, Label, Button, Entry, W from tkinter import Scrollbar, Listbox, Tk, Frame, Label, Button, Entry
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
@ -94,18 +94,18 @@ class GesMag:
self.f.destroy() self.f.destroy()
# Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame # Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame
self.f = Frame(self.parent) self.f = Frame(self.parent)
self.f.pack() self.f.grid()
# Affichage des labels et boutons # Affichage des labels et boutons
tentativeDeConnexion = lambda _ = None: self.connexion(utilisateur.get(), motDpasse.get()) # lambda pour envoyer les informations entrés dans le formulaire tentativeDeConnexion = lambda _ = None: self.connexion(utilisateur.get(), motDpasse.get()) # lambda pour envoyer les informations entrés dans le formulaire
ecart = 80 # écart pour avoir un affichage centré ecart = 80 # écart pour avoir un affichage centré
Label(self.f).grid(row=0, pady=50) # utilisé pour du padding (meilleur affichage) Label(self.f).grid(row=0, pady=50) # utilisé pour du padding (meilleur affichage)
Label(self.f, text="Utilisateur", font=self.font).grid(column=0, row=1, columnspan=2, padx=ecart - 20, pady=20, sticky=W) Label(self.f, text="Utilisateur", font=self.font).grid(column=0, row=1, columnspan=2, padx=ecart - 20, pady=20, sticky='w')
utilisateur = Entry(self.f, font=self.font, width=18) utilisateur = Entry(self.f, font=self.font, width=18)
utilisateur.grid(column=1, row=2, columnspan=2, padx=ecart) utilisateur.grid(column=1, row=2, columnspan=2, padx=ecart)
Label(self.f, text="Mot de passe", font=self.font).grid(column=0, row=3, columnspan=2, padx=ecart - 20, pady=20, sticky=W) Label(self.f, text="Mot de passe", font=self.font).grid(column=0, row=3, columnspan=2, padx=ecart - 20, pady=20, sticky='w')
motDpasse = Entry(self.f, font=self.font, show='', width=18) motDpasse = Entry(self.f, font=self.font, show='', width=18)
motDpasse.grid(column=1, row=4, columnspan=2, padx=ecart) motDpasse.grid(column=1, row=4, columnspan=2, padx=ecart)
motDpasse.bind("<Return>", tentativeDeConnexion) motDpasse.bind("<Return>", tentativeDeConnexion)
@ -132,11 +132,11 @@ class GesMag:
Button(self.f, text="Quitter", font=self.font, command=quit).grid(column=0, row=6, columnspan=4, pady=20) Button(self.f, text="Quitter", font=self.font, command=quit).grid(column=0, row=6, columnspan=4, pady=20)
self._interfaceManager(1) self._interfaceManager(1) # DEBUG: affiche directement l'interface du Manager
def _interfaceCaissier(self, id: int): def _interfaceCaissier(self, id: int):
"""Affiche l'interface du caissier.""" """Affiche l'interface du caissier."""
caissier = Utilisateurs().recuperationUtilisateur(id)[0] caissier = Utilisateurs().recuperationUtilisateur(id=id)[0]
self.parent.title(f"Caissier {caissier[3]} {caissier[4]}") self.parent.title(f"Caissier {caissier[3]} {caissier[4]}")
self.dimensionsFenetre(1280, 720) self.dimensionsFenetre(1280, 720)
@ -144,21 +144,62 @@ class GesMag:
self.f.destroy() self.f.destroy()
# Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame # Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame
self.f = Frame(self.parent) self.f = Frame(self.parent)
self.f.pack() self.f.grid()
def _interfaceManager(self, id: int): def _interfaceManager(self, id: int):
"""Affiche l'interface du manager.""" """Affiche l'interface du manager."""
manager = Utilisateurs().recuperationUtilisateur(id) manager = Utilisateurs().recuperationUtilisateur(id=id)
self.parent.title(f"Manager {manager['nom']} {manager['prenom']}") self.parent.title(f"Manager {manager['nom']} {manager['prenom']}")
self.dimensionsFenetre(1280, 720) self.dimensionsFenetre(530, 720)
# Suppresssion de la dernière Frame # Suppresssion de la dernière Frame
self.f.destroy() self.f.destroy()
# Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame # Instanciation d'une nouvelle Frame, on va donc ajouter tout nos widgets à cet Frame
self.f = Frame(self.parent) self.f = Frame(self.parent)
self.f.pack() self.f.grid()
Label(self.f, text="ceci est un giga label").grid() Label(self.f, text="Interface Manager", font=(self.font[0], 20)).grid(column=0, row=0)
Button(self.f, text="Se déconnecter", font=self.font, command=self._interfaceConnexion).grid(column=1, row=0, padx=50)
Label(self.f).grid(row = 1, pady=10) # séparateur
def __ajouterUtilisateur(metier: int):
"""Permet de créer un nouvel utilisateur, manager (`metier = 0`) et caissier (`metier = 1`)."""
print(f"ajout d'un utilisateur (métier = {metier})")
# ouvrir un toplevel?
def __retirerUtilisateur(metier: int):
"""Permet de supprimer un utilisateur existant, manager (`metier = 0`) et caissier (`metier = 1`)."""
print(f"retirer un utilisateur (métier = {metier})")
# ouvrir un toplevel?
def __afficherInformationsUtilisateur(_):
"""Permet d'afficher les informations d'un utilisateur"""
element = listeUtilisateurs.curselection()
if len(element) == 0: # si aucun élément n'est selectionné
return
print(Utilisateurs().recuperationUtilisateur(pseudo=listeUtilisateurs.get(element[0])))
# ouvrir un toplevel?
Button(self.f, text="Ajouter un caissier", font=self.font, command=lambda: __ajouterUtilisateur(1)).grid(column=0, row=2)
Button(self.f, text="Retirer un caissier", font=self.font, command=lambda: __retirerUtilisateur(1)).grid(column=1, row=2)
Label(self.f).grid(row = 3, pady=10) # séparateur
# Liste des utilisateurs
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.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
# On ajoute nos utilisateurs à notre liste
for idx, utilisateur in enumerate(Utilisateurs().listUtilisateurs()):
listeUtilisateurs.insert(idx, utilisateur)
listeUtilisateurs.grid(column=0, row=5)
listeUtilisateurs.bind('<Double-Button>', __afficherInformationsUtilisateur) # on affiche l'utilisateur quand on double-clique dessus
if __name__ == "__main__": if __name__ == "__main__":
"""Application "GesMag" pour le module de Programmation d'interfaces (2021-2022)""" """Application "GesMag" pour le module de Programmation d'interfaces (2021-2022)"""