import customtkinter as tk # import de la bibliothèque interface graphique "as tk" : on remplace customtkinter par tk from time import sleep import random TypeDeDes = 0 # variables globales NbredeDes = 0 def quitter(): # création d'une fonction pour quitter fenetreMenu.destroy() # destroy = fonction qui arrête tout fenetreMenu = tk.CTk() # définition des caractéristiques de la fenêtre fenetreMenu.title("Menu principal") fenetreMenu.geometry("400x600") label = tk.CTkLabel(fenetreMenu, text="Lancez les dés", font=('Arial',22)) # crée du texte label.pack(pady=5) # Création des boutons cadreFormatDe=tk.CTkFrame(fenetreMenu) # création d'un cadre pour facilité la disposition cadreFormatDe.pack(side=tk.TOP, anchor=tk.CENTER, pady=10) DicoBoutons = {} # création d'un Dico pour distingués les boutons for i in [4, 6, 8, 10, 12, 20] : button = tk.CTkButton(cadreFormatDe, text= f"D{i}", hover=False, width=50) # création d'un bouton button.pack(side=tk.LEFT, padx=1, pady=1) #expand=True, fill=tk.X, anchor=tk.CENTER DicoBoutons[i] = button def clic4 (): # fonction de l'action sur le bouton (choix du type de dé) print("D4") for i in [4, 6, 8, 10, 12, 20] : # boucle qui change la couleur de tous les boutons DicoBoutons[i].configure(fg_color="blue") # pour réinitialisé en bleu DicoBoutons[4].configure(fg_color="red") # changement de la couleur en rouge pour visualisé sur la fenêtre global TypeDeDes # indique l'utilisation d'une variable global (sinon la variable sera redéfini en local) TypeDeDes = 4 # affectation du type de dé def clic6 (): print("D6") for i in [4, 6, 8, 10, 12, 20] : DicoBoutons[i].configure(fg_color="blue") DicoBoutons[6].configure(fg_color="red") global TypeDeDes TypeDeDes = 6 def clic8 (): print("D8") for i in [4, 6, 8, 10, 12, 20] : DicoBoutons[i].configure(fg_color="blue") DicoBoutons[8].configure(fg_color="red") global TypeDeDes TypeDeDes = 8 def clic10 (): print("D10") for i in [4, 6, 8, 10, 12, 20] : DicoBoutons[i].configure(fg_color="blue") DicoBoutons[10].configure(fg_color="red") global TypeDeDes TypeDeDes = 10 def clic12 (): print("D12") for i in [4, 6, 8, 10, 12, 20] : DicoBoutons[i].configure(fg_color="blue") DicoBoutons[12].configure(fg_color="red") global TypeDeDes TypeDeDes = 12 def clic20 (): print("D20") for i in [4, 6, 8, 10, 12, 20] : DicoBoutons[i].configure(fg_color="blue") DicoBoutons[20].configure(fg_color="red") global TypeDeDes TypeDeDes = 20 DicoBoutons[4].configure(command=clic4) DicoBoutons[6].configure(command=clic6) DicoBoutons[8].configure(command=clic8) DicoBoutons[10].configure(command=clic10) DicoBoutons[12].configure(command=clic12) DicoBoutons[20].configure(command=clic20) # print(DicoBoutons) #print de controle labelerreur = tk.CTkLabel(fenetreMenu) def recup_NbreDes(): entierNDD = 0 labelerreur.pack_forget() global NbredeDes NbredeDes = entryNbreDes.get() try: entierNDD = int(NbredeDes) print("Nombre entier saisi :", entierNDD) except ValueError: labelerreur.configure(fenetreMenu, text="Veuillez saisir un nombre entier valide.", font=('Arial',20)) # crée du texte (label) labelerreur.pack() resultatDe = 0 typeDeDe = TypeDeDes print(typeDeDe , entierNDD) # print de vérif des données listeResultat = [0] # création d'une liste pour stocker le nombre de résultats par valeur for i in range(1,typeDeDe) : # boucle d'ajout d'un élément à la liste listeResultat.append(0) i = 1 # variable d'incrémentation while( i <= entierNDD ) : # boucle de lancer de dés et stockage des résultats par valeur resultatDe = random.randint(1,typeDeDe) listeResultat[resultatDe-1] += 1 i+=1 listeReussite = [0] # création d'un tableau de réussite for i in range(1,typeDeDe) : # boucle d'ajout d'un élément au tableau listeReussite.append(0) for i in range(0,typeDeDe) : for u in range(i,typeDeDe) : # boucle de remplissage du tableau des réussites listeReussite[i] = listeReussite[i] + listeResultat[u] print(listeResultat) # print de contrôle du tableau des résultat de lancer print(listeReussite) # print de contrôle du tableau des réussites # Supprimer les anciens résultats s'il y en a effacer_resultats() # Afficher les résultats dans une grille #label_titre = tk.Label(fenetreMenu, text="Résultats des lancers de dé") #label_titre.grid(row=0, column=0, columnspan=2) # Afficher les en-têtes des colonnes label_valeur = tk.CTkLabel(cadreAffResultat, text="Face du dé") label_valeur.grid(row=1, column=0,padx=5, ) label_occurrences = tk.CTkLabel(cadreAffResultat, text="Occurrences") label_occurrences.grid(row=1, column=1 ,padx=5, ) label_Reussites = tk.CTkLabel(cadreAffResultat, text="Réussites") label_Reussites.grid(row=1, column=2,padx=5, ) # Afficher chaque valeur de dé et son nombre d'occurrences for i in range(1,typeDeDe+1) : label_valeur = tk.CTkLabel(cadreAffResultat, text=str(i)) label_valeur.grid(row=i+1, column=0 ) label_occurrences = tk.CTkLabel(cadreAffResultat, text=str(listeResultat[i-1])) label_occurrences.grid(row=i+1, column=1 ) label_Reussites = tk.CTkLabel(cadreAffResultat, text=str(listeReussite[i-1])) label_Reussites.grid(row=i+1, column=2 ) def effacer_resultats(): # Supprimer tous les widgets for widget in cadreAffResultat.winfo_children() : widget.grid_forget() cadreNbreDe=tk.CTkFrame(fenetreMenu) # création d'un cadre pour le nombre de dés cadreNbreDe.pack(side=tk.TOP, pady=10) # définition du cadre label = tk.CTkLabel(cadreNbreDe, text="Nombre de dés", font=('Arial',20)) # crée du texte (label) label.pack(side=tk.LEFT, padx=10) # définition des caractéristiques du label entryNbreDes = tk.CTkEntry(cadreNbreDe, width=50) # crée une zone de saisie entryNbreDes.pack(side=tk.LEFT,padx=5) # définition des caractéristiques de la zone de saisie BoutonOK = tk.CTkButton(cadreNbreDe,text = "OK", width=40, command=recup_NbreDes ) BoutonOK.pack(side=tk.LEFT) cadreAffResultat = tk.CTkFrame(fenetreMenu) cadreAffResultat.pack() cadreQuit=tk.CTkFrame(fenetreMenu) # création d'un cadre pour facilité la disposition cadreQuit.pack(fill=tk.X, side=tk.BOTTOM, anchor=tk.CENTER, pady=15) # fill permet l'allongemment button = tk.CTkButton(cadreQuit, text="QUITTER", command=quitter) # création d'un bouton pour fermer button.pack(side=tk.BOTTOM, pady=15) # side=tk.BOTTOM est utilisé pour ancrer vers le bas : indiquer celui qui est plus bas en premier # entry = tk.CTkEntry(fenetreMenu, width=250) # crée une zone de saisie # entry.pack(side=tk.BOTTOM,) fenetreMenu.mainloop()