Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/python3
- # -*- coding: utf8 -*-
- #---------------------------------------------------------------------------------
- # Copyright © 2016 Benoît Boudaud <https://twitter.com/Ordinosor>
- # This program is free software: you can redistribute it and/or modify
- # it under the terms of the GNU General Public License as published by
- # the Free Software Foundation, either version 3 of the License, or
- # any later version.
- #
- # This program is distributed in the hope that it will be useful,
- # but WITHOUT ANY WARRANTY; without even the implied warranty of
- # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- # GNU General Public License for more details.
- #
- # You should have received a copy of the GNU General Public License
- # along with this program. If not, see <http://www.gnu.org/licenses/>
- #---------------------------------------------------------------------------------
- from tkinter import* # Importation du module tkinter
- from module_globs import Globales # Importation du module de redimensionnement
- import os # Fonctions basiques du système d'exploitation
- from PIL import Image, ImageTk # Module PIL (traitement des images importées)
- from calendrier_perpetuel import Calendar # Importation du module calendrier
- from agenda_perpetuel import Agenda_perpetuel # Importation du module Agenda
- from module_notes import Notes # Improtation du module notes
- from phototheque_jardin import Phototheque_Jardin # Importation du module photothèque_jardin
- from legume import Legumes # Importation du module légumes
- from fruit import Fruits ## Importation du module fruits
- import tkinter.messagebox # Importation du module de création des fenêtres de dialogue
- import tkinter.filedialog # Importation du module.pour chosir un fichier.
- import shutil # Importation du module de copie
- import collections # Module servant à créer un dictionnaire ordonné
- class Home(object):
- "Instanciation de la page d'accueil"
- def _init_(self):
- """constructeur, méthode qui s'exécute automatiquement
- lorsque un nouvel objet est créé par instanciation d'une classe."""
- #- Méthode-----------------------------------------------------------------------------
- def home(self) :
- "Instanciation de la page d'accueil"
- self.directory = os.getcwd() # Retourne le répertoire courant
- self.main_window = Tk() # Création de la fenêtre principale
- self.main_window.title('Mon jardin 3.0') # Titre de la fenêtre
- self.main_window.config(bg='white')
- self.main_window.resizable(False, False) # Empêche le redimensionnement de la fenêtre
- self.size = Globales(self.main_window) # Classe du module de redimensionnement.
- self.h = round(self.size.height()) # Coefficient de hauteur
- self.w = round(self.size.width()) # Coefficient de largeur
- self.home_image = "/images/mon_jardin.png" # Image de la page principale
- self.image = Image.open(self.directory + self.home_image)
- self.image_size = 512, 384
- self.image.thumbnail(self.image_size) # Redimensionnement de l'image
- self.photo = ImageTk.PhotoImage(self.image, master = self.main_window)
- self.main_frame = Frame(self.main_window, height = self.h*100, width = self.w*100, bg= 'white', relief = 'ridge', bd = 0)
- self.main_frame.grid(row=0)
- self.main_frame.grid_propagate(0)
- self.homepage() # Appel de la méthode suivante:
- self.main_window.mainloop() # Démarrage du réceptionnaire d'événements.
- def homepage(self):
- "Instanciation du bouton principal de la page d'accueil"
- for child in self.main_frame.winfo_children(): # Destruction des widgets contenus dans le widget main_frame.
- child.destroy()
- self.home_accueil=LabelFrame(self.main_frame, text=' MON JARDIN ', labelanchor='n', font='Times 40 italic', bg='white', fg='green', relief='ridge', bd=3, padx=20, pady=20)
- self.home_accueil.grid(row = 0, padx = (self.w*100)/2 - round(self.w*21), pady=self.h*15)
- for child in self.home_accueil.winfo_children():
- child.destroy()
- self.titre=Button(self.home_accueil, image=self.photo, bg='green', relief='ridge', cursor = 'hand2', bd=3, padx=20, command=self.buttons) # Création du bouton
- self.titre.grid()
- #- Méthode-----------------------------------------------------------------------------
- def buttons(self):
- "Création des boutons de la page menu"
- self.titre.destroy() # Destruction du bouton de la page d'accueil
- self.home_accueil.grid(row = 0, padx = (self.w*100)/2 - round(self.w*34), pady=self.h*15) # Repositionnement du widget qui contenait le bouton précédent pour accueillir d'autres widgets.
- self.buttons_frame = Frame(self.home_accueil, bg='white', padx=20)
- self.buttons_frame.grid()
- self.images = ["/images/home.png" ,"/images/calendar.png" ,"/images/legumes.png" ,"/images/fruits.png","/images/post_it.png","/images/default_image.png"] # Images illustrant les boutons.
- self.tabs_list=[]
- self.row_number=0
- self.column_number=0
- self.images_open = [Image.open(self.directory + i) for i in self.images] # Compréhension de liste
- self.images_size = (172, 139)
- [i.thumbnail(self.images_size) for i in self.images_open]
- self.photos = [ImageTk.PhotoImage(i, master = self.main_window) for i in self.images_open] # Compréhension de liste
- for i, element in enumerate(self.images): # Création des boutons (Button et Menubutton)
- self.tab = Menubutton(self.buttons_frame, bg = 'white', activebackground = 'white', relief = 'ridge', bd = 2, fg = 'white', font = 'Times 24 italic', cursor = 'hand2')
- if i == 4 or i == 5 :
- self.tab = Button(self.buttons_frame, bg = 'white', activebackground = 'white', font = 'Times 24 italic', cursor = 'hand2')
- self.tab.grid(row = self.row_number, column = self.column_number, padx = 50, pady = 50, sticky = 'ew')
- self.column_number += 1
- if self.column_number%3 == 0:
- self.row_number += 1
- self.column_number = 0
- self.tabs_list.append(self.tab)
- for i, element in enumerate(self.tabs_list):
- self.tabs_list[i].configure(image = self.photos[i])
- # Création du menu du bouton d'accueil:
- self.home_basic_func = Menu(self.tabs_list[0], bg = 'white', fg = 'green', bd = 2, relief = 'ridge', font = 'Times 14 italic')
- self.home_basic_func.add_command(label = 'Page d\'accueil', underline = 0, command = self.homepage)
- self.home_basic_func.add_command(label = 'Quitter', underline = 0, command = self.main_frame.quit)
- self.tabs_list[0].configure(menu = self.home_basic_func)
- # Création du menu du bouton calendrier-agenda:
- self.calendar = Calendar()
- self.agenda = Agenda_perpetuel()
- self.agenda_basic_func = Menu(self.tabs_list[1], bg = 'white', fg = 'green', bd = 2, relief = 'ridge', font = 'Times 14 italic')
- self.agenda_basic_func.add_command(label = 'Calendrier', underline = 0, command = self.calendar.calendar)
- self.agenda_basic_func.add_command(label = 'Agenda', underline = 0, command = self.agenda.agenda_perpetuel)
- self.tabs_list[1].configure(menu = self.agenda_basic_func)
- # Création de l'objet self.notes par instanciation de la classe Notes (ligne 28: module_notes):
- self.notes = Notes()
- self.tabs_list[4].configure(command = self.notes.notes) # Appel de la méthode notes() de la classe Notes
- # Création de l'objet self.phototheque par instanciation de la classe Photothèque (ligne 29: module phototheque_jardin):
- self.phototheque = Phototheque_Jardin()
- self.tabs_list[5].configure(command = self.phototheque.phototheque) # Appel de la méthode phototheque de la classe Phototheque
- self.show_list_vegetables() # Appel de la méthode définie ligne 138
- self.show_list_fruits() # Appel de la méthode définie ligne 249
- #- Méthode-----------------------------------------------------------------------------
- def show_list_vegetables(self) :
- "Méthode qui déroule la liste des légumes enregistrés dans le menu du bouton."
- self.file_images_legumes = open("images_legumes", 'a') # Création en mode "append" du fichier "images_légumes".
- self.file_images_legumes.close() # Fermeture du fichier (Attention! Ne pas oublier!)
- with open("images_legumes", 'r') as self.file_images_legumes:
- self.readfile_images_legumes = self.file_images_legumes.readlines() # Fermeture automatique du fichier
- self.file_legumes = open("legumes", 'a') # Création en mode "append" du fichier "légumes".
- self.file_legumes.close() # Fermeture du fichier (Attention! Ne pas oublier!)
- with open("legumes", 'r') as self.file_legumes:
- self.readfile_legumes = self.file_legumes.readlines() # Fermeture automatique du fichier
- self.dico_legumes = {} # Création d'un dictionnaire contenant le nom du légume et l'image associée à ce légume
- self.dico_legumes = collections.OrderedDict(self.dico_legumes) # Création d'un dictionnaire ordonné.
- for i, element in enumerate(self.readfile_legumes):
- self.dico_legumes[i] = (self.readfile_images_legumes[i].strip(), self.readfile_legumes[i].strip()) # clé = int, valeur = tuple
- # Création du menu déroulant:
- self.liste_object_vegetables = [] # Liste qui stocke les objets correspondant aux pages de légumes
- self.vegetables_basic_func = Menu(self.tabs_list[2], bg = 'white', fg = 'green', bd = 2, relief = 'ridge', font = 'Times 14 italic')
- self.vegetables_basic_func.add_command(label = 'Rajouter un légume', underline = 0, command = self.add_vegetable) # La commande appelle la méthode add_vegetable()
- self.vegetables_basic_func.add_command(label = 'Supprimer un légume', underline = 0, command = self.remove_vegetable) # La commande appelle la méthode remove_vegetable()
- for i, element in enumerate(self.dico_legumes): # Création des pages de légumes par instanciation de la classe Legumes
- self.object_vegetables = Legumes(i, self.dico_legumes[i], "varietes_" + self.dico_legumes[i][1].lower(), "notes_" + self.dico_legumes[i][1].lower())
- self.liste_object_vegetables.append(self.object_vegetables.legumes)
- self.vegetables_basic_func.add_command(label = self.dico_legumes[i][1], underline = 0, command = self.liste_object_vegetables[i])
- self.tabs_list[2].configure(menu = self.vegetables_basic_func)
- #- Méthode-----------------------------------------------------------------------------
- def add_vegetable(self):
- "Méthode qui ouvre une fenêtre pop-up pour rajouter un nouveau légume dans le menu déroulant."
- self.rajout = Toplevel()
- self.rajout.title("Rajouter un légume")
- self.rajout_label = Label(self.rajout, text = "Veuillez entrer le nom du nouveau légume", font = "Times 14", pady = 5)
- self.rajout_label.grid(row = 0, padx = 10)
- self.champ_rajout = Entry(self.rajout, width = 30, font = "Times 14")
- self.champ_rajout.grid(row = 1, padx = 10, pady = 10)
- self.champ_rajout.bind('<Return>', self.save_new_vegetable) # Appel de la méthode d'enregistrement du nouveau légume.
- #- Méthode-----------------------------------------------------------------------------
- def save_new_vegetable(self, event):
- """Méthode qui enregistre un nouveau légume dans le menu déroulant et qui créé
- la page associée."""
- self.new_vegetable = self.champ_rajout.get().capitalize() # Récupération du nom du nouveau légume et ajout d'une majuscule au début du nom.
- self.rajout.iconify() # Iconification de la fenêtre Toplevel
- with open("legumes", 'r') as self.file_legumes:
- self.readfile_legumes = self.file_legumes.readlines()
- if self.new_vegetable + "\n" in self.readfile_legumes: # Si le légume est déjà présent dans la liste, ouverture d'une fenêtre d'avertissement:
- tkinter.messagebox.showwarning("Légume déjà enregistré", "Ce légume est déjà enregistré.")
- else:
- with open("legumes", 'a') as self.file_legumes:
- self.file_legumes.write(self.new_vegetable + "\n") # Rajout du nom du nouveau légume dans le fichier "legumes"
- self.new_file_legume = open("varietes_" + self.champ_rajout.get().lower(), 'a') # Création d'un fichier "variétés du légume" en mode "append".
- self.new_file_legume.close()
- self.new_file_notes_legume = open("notes_" + self.champ_rajout.get().lower(), 'a') # Création d'un fichier "notes concernant le légume" en mode "append"
- self.new_file_notes_legume.close()
- with open('images_legumes', 'a') as self.file_image :
- self.file_image.write("/images/default_image.png\n") # Attribution de l'image par défaut pour illustrer la nouvelle page "légumes".
- self.show_list_vegetables()
- self.import_picture = tkinter.messagebox.askquestion("Importer une image", "Le nouveau légume vient d'être rajouté. Souhaitez-vous importer une image pour illustrer la page " + self.new_vegetable + "?", icon = "question")
- if self.import_picture == "yes" : # Réponse positive à la question précédente
- self.choose_picture = tkinter.filedialog.askopenfilename(title="Importer une image",filetypes=[('png files','.png'),('all files','.*')])
- self.basename = os.path.basename(self.choose_picture) # Retourne le dernier élément d'un chemin
- shutil.copy(self.choose_picture, "images/images_importees") # Copie de l'image importée dans le dossier passé en deuxième argument.
- with open("images_legumes", 'r') as self.file_images_legumes:
- self.readfile_images_legumes = self.file_images_legumes.readlines()
- self.readfile_images_legumes = self.readfile_images_legumes[:-1] # Suppression de l'image par défaut
- self.readfile_images_legumes.append('/images/images_importees/' + self.basename + '\n') # Ajout de la nouvelle image
- with open("images_legumes", 'w') as self.file_images_legumes :
- for i, element in enumerate(self.readfile_images_legumes):
- self.file_images_legumes.write(self.readfile_images_legumes[i]) # Réécriture du contenu du fichier "images_légumes"
- self.show_list_vegetables() # Appel de la méthode show_list_vegetables()
- #- Méthode-----------------------------------------------------------------------------
- def remove_vegetable(self):
- "Méthode qui supprime un légume"
- self.remove = Toplevel()
- self.remove.title("Supprimer un légume")
- self.remove_label = Label(self.remove, text = "Entrez le nom du légume à supprimer", font = "Times 14", pady = 5)
- self.remove_label.grid(row = 0, padx = 10)
- self.champ_remove = Entry(self.remove, width = 30, font = "Times 14")
- self.champ_remove.grid(row = 1, padx = 10, pady = 10)
- self.champ_remove.bind('<Return>', self.vegetable_to_remove) # Appel de la méthode de suppression du nouveau légume.
- #- Méthode-----------------------------------------------------------------------------
- def vegetable_to_remove(self, event):
- "Méthode qui supprime un légume."
- self.remove_vegetable = self.champ_remove.get() # Récupération du nom du légume à supprimer.
- self.remove.iconify() # Iconification de la fenêtre Toplevel()
- self.confirmation_suppression = tkinter.messagebox.askokcancel("Supprimer ce légume?", "Voulez-vous vraiment supprimer ce légume?\nCette opération est irréversible et détruira toutes les données enregistrées.") # Message d'avertissement avant destruction définitive.
- with open("legumes", 'r') as self.file_legumes:
- self.readfile_legumes = self.file_legumes.readlines()
- for i, element in enumerate (self.readfile_legumes):
- if self.remove_vegetable.lower() == self.readfile_legumes[i].lower().strip():
- self.readfile_legumes.remove(self.readfile_legumes[i]) # Suppression du légume
- with open("legumes", 'w') as self.file_legumes: # Ouverture en mode "write" (= Effacement des données contenues dans le fichier.)
- for i2, element in enumerate(self.readfile_legumes):
- self.file_legumes.write(self.readfile_legumes[i2]) # Réécriture du fichier
- with open("images_legumes", 'r') as self.file_images_legumes: # Ouverture en mode lecture et stockage des données du fichier dans la variable (de type liste) suivante:
- self.readfile_images_legumes = self.file_images_legumes.readlines()
- if self.readfile_images_legumes[i] != "/images/default_image.png\n": # Suppression du chemin de l'image du légume si ce chemin est différent de l'image par défaut.
- self.to_remove = self.readfile_images_legumes[i] # Stockage dans une variable avant suppression
- self.readfile_images_legumes.remove(self.readfile_images_legumes[i]) # Suppression dans la liste
- if self.to_remove not in self.readfile_images_legumes:
- os.remove(self.directory + self.to_remove.strip()) # Suppression de l'image dans le répertoire si celle-ci n'est pas utilisée pour un autre légume (par erreur ou étourderie).
- with open("images_legumes", 'w') as self.file_images_legumes : # Réécriture du fichier
- for i, element in enumerate(self.readfile_images_legumes):
- self.file_images_legumes.write(self.readfile_images_legumes[i])
- for i in os.listdir(self.directory): # retourne la liste des fichiers ou dossiers présent dans le répertoire passé en argument
- if i.startswith("varietes_" + self.remove_vegetable.lower()): # Suppression du fichier "varietes_xxxx" contenant le nom du légume sans majuscule (.lower())
- os.remove(i)
- if self.directory + "/notes_" + self.remove_vegetable.lower():
- os.remove(self.directory + "/notes_" + self.remove_vegetable.lower()) # Suppression du fichier "notes_xxxx" contenant le nom du légume sans majuscule.
- self.champ_remove.delete(0, 30) # Effacement du contenu du champ d'entrée
- self.show_list_vegetables() # Appel de la méthode show_list_vegetables()
- #- Méthode-----------------------------------------------------------------------------
- def show_list_fruits(self) :
- "Méthode qui déroule la liste des fruits enregistrés dans le menu du bouton."
- self.file_images_fruits = open("images_fruits", 'a') # Création en mode "append" du fichier "images_fruits".
- self.file_images_fruits.close() # Fermeture du fichier (Attention! Ne pas oublier!)
- with open("images_fruits", 'r') as self.file_images_fruits:
- self.readfile_images_fruits = self.file_images_fruits.readlines() # Fermeture automatique du fichier
- self.file_fruits = open("fruits", 'a') # Création en mode "append" du fichier "fruits".
- self.file_fruits.close() # Fermeture du fichier (Attention! Ne pas oublier!)
- with open("fruits", 'r') as self.file_fruits:
- self.readfile_fruits = self.file_fruits.readlines() # Fermeture automatique du fichier
- self.dico_fruits = {} # Création d'un dictionnaire contenant le nom du fruit et l'image associée à ce fruit
- self.dico_fruits = collections.OrderedDict(self.dico_fruits) # Création d'un dictionnaire ordonné.
- for i, element in enumerate(self.readfile_fruits):
- self.dico_fruits[i] = (self.readfile_images_fruits[i].strip(), self.readfile_fruits[i].strip()) # clé = int, valeur = tuple
- # Création du menu déroulant:
- self.liste_object_fruits = [] # Liste qui stocke les objets correspondant aux pages de fruits
- self.fruits_basic_func = Menu(self.tabs_list[3], bg = 'white', fg = 'green', bd = 2, relief = 'ridge', font = 'Times 14 italic')
- self.fruits_basic_func.add_command(label = 'Rajouter un fruit', underline = 0, command = self.add_fruit) # La commande appelle la méthode add_fruit()
- self.fruits_basic_func.add_command(label = 'Supprimer un fruit', underline = 0, command = self.remove_fruit) # La commande appelle la méthode remove_fruit()
- for i, element in enumerate(self.dico_fruits): # Création des pages de fruits par instanciation de la classe Fruits
- self.object_fruits = Fruits(i, self.dico_fruits[i], "varietes_" + self.dico_fruits[i][1].lower(), "notes_" + self.dico_fruits[i][1].lower())
- self.liste_object_fruits.append(self.object_fruits.fruits)
- self.fruits_basic_func.add_command(label = self.dico_fruits[i][1], underline = 0, command = self.liste_object_fruits[i])
- self.tabs_list[3].configure(menu = self.fruits_basic_func)
- #- Méthode-----------------------------------------------------------------------------
- def add_fruit(self):
- "Méthode qui ouvre une fenêtre pop-up pour rajouter un nouveau fruit dans le menu déroulant."
- self.rajout = Toplevel()
- self.rajout.title("Rajouter un fruit")
- self.rajout_label = Label(self.rajout, text = "Veuillez entrer le nom du nouveau fruit", font = "Times 14", pady = 5)
- self.rajout_label.grid(row = 0, padx = 10)
- self.champ_rajout = Entry(self.rajout, width = 30, font = "Times 14")
- self.champ_rajout.grid(row = 1, padx = 10, pady = 10)
- self.champ_rajout.bind('<Return>', self.save_new_fruit) # Appel de la méthode d'enregistrement du nouveau fruit.
- #- Méthode-----------------------------------------------------------------------------
- def save_new_fruit(self, event):
- """Méthode qui enregistre un nouveau fruit dans le menu déroulant et qui créé
- la page associée."""
- self.new_fruit = self.champ_rajout.get().capitalize() # Récupération du nom du nouveau fruit et ajout d'une majuscule au début du nom.
- self.rajout.iconify() # Iconification de la fenêtre Toplevel
- with open("fruits", 'r') as self.file_fruits:
- self.readfile_fruits = self.file_fruits.readlines()
- if self.new_fruit + "\n" in self.readfile_fruits: # Si le fruit est déjà présent dans la liste, ouverture d'une fenêtre d'avertissement:
- tkinter.messagebox.showwarning("Fruit déjà enregistré", "Ce fruit est déjà enregistré.")
- else:
- with open("fruits", 'a') as self.file_fruits:
- self.file_fruits.write(self.new_fruit + "\n") # Rajout du nom du nouveau fruit dans le fichier "fruits"
- self.new_file_fruit = open("varietes_" + self.champ_rajout.get().lower(), 'a') # Création d'un fichier "variétés du fruit" en mode "append".
- self.new_file_fruit.close()
- self.new_file_notes_fruit = open("notes_" + self.champ_rajout.get().lower(), 'a') # Création d'un fichier "notes concernant le fruit" en mode "append"
- self.new_file_notes_fruit.close()
- with open('images_fruits', 'a') as self.file_image :
- self.file_image.write("/images/default_image.png\n") # Attribution de l'image par défaut pour illustrer la nouvelle page "fruits".
- self.show_list_fruits()
- self.import_picture = tkinter.messagebox.askquestion("Importer une image", "Le nouveau fruit vient d'être rajouté. Souhaitez-vous importer une image pour illustrer la page " + self.new_fruit + "?", icon = "question")
- if self.import_picture == "yes" : # Réponse positive à la question précédente
- self.choose_picture = tkinter.filedialog.askopenfilename(title="Importer une image",filetypes=[('png files','.png'),('all files','.*')])
- self.basename = os.path.basename(self.choose_picture) # Retourne le dernier élément d'un chemin
- shutil.copy(self.choose_picture, "images/images_importees") # Copie de l'image importée dans le dossier passé en deuxième argument.
- with open("images_fruits", 'r') as self.file_images_fruits:
- self.readfile_images_fruits = self.file_images_fruits.readlines()
- self.readfile_images_fruits = self.readfile_images_fruits[:-1] # Suppression de l'image par défaut
- self.readfile_images_fruits.append('/images/images_importees/' + self.basename + '\n') # Ajout de la nouvelle image
- with open("images_fruits", 'w') as self.file_images_fruits :
- for i, element in enumerate(self.readfile_images_fruits):
- self.file_images_fruits.write(self.readfile_images_fruits[i]) # Réécriture du contenu du fichier "images_fruits"
- self.show_list_fruits() # Appel de la méthode show_list_fruits()
- #- Méthode-----------------------------------------------------------------------------
- def remove_fruit(self):
- "Méthode qui supprime un fruit"
- self.remove = Toplevel()
- self.remove.title("Supprimer un fruit")
- self.remove_label = Label(self.remove, text = "Entrez le nom du fruit à supprimer", font = "Times 14", pady = 5)
- self.remove_label.grid(row = 0, padx = 10)
- self.champ_remove = Entry(self.remove, width = 30, font = "Times 14")
- self.champ_remove.grid(row = 1, padx = 10, pady = 10)
- self.champ_remove.bind('<Return>', self.fruit_to_remove) # Appel de la méthode de suppression du nouveau fruit.
- #- Méthode-----------------------------------------------------------------------------
- def fruit_to_remove(self, event):
- "Méthode qui supprime un fruit."
- self.remove_fruit = self.champ_remove.get() # Récupération du nom du fruit à supprimer.
- self.remove.iconify() # Iconification de la fenêtre Toplevel()
- self.confirmation_suppression = tkinter.messagebox.askokcancel("Supprimer ce fruit?", "Voulez-vous vraiment supprimer ce fruit?\nCette opération est irréversible et détruira toutes les données enregistrées.") # Message d'avertissement avant destruction définitive.
- with open("fruits", 'r') as self.file_fruits:
- self.readfile_fruits = self.file_fruits.readlines()
- for i, element in enumerate (self.readfile_fruits):
- if self.remove_fruit.lower() == self.readfile_fruits[i].lower().strip():
- self.readfile_fruits.remove(self.readfile_fruits[i]) # Suppression du fruit
- with open("fruits", 'w') as self.file_fruits: # Ouverture en mode "write" (= Effacement des données contenues dans le fichier.)
- for i2, element in enumerate(self.readfile_fruits):
- self.file_fruits.write(self.readfile_fruits[i2]) # Réécriture du fichier
- with open("images_fruits", 'r') as self.file_images_fruits: # Ouverture en mode lecture et stockage des données du fichier dans la variable (de type liste) suivante:
- self.readfile_images_fruits = self.file_images_fruits.readlines()
- if self.readfile_images_fruits[i] != "/images/default_image.png\n": # Suppression du chemin de l'image du fruit si ce chemin est différent de l'image par défaut.
- self.to_remove = self.readfile_images_fruits[i] # Stockage dans une variable avant suppression
- self.readfile_images_fruits.remove(self.readfile_images_fruits[i]) # Suppression dans la liste
- if self.to_remove not in self.readfile_images_fruits:
- os.remove(self.directory + self.to_remove.strip()) # Suppression de l'image dans le répertoire si celle-ci n'est pas utilisée pour un autre fruit (par erreur ou étourderie).
- with open("images_fruits", 'w') as self.file_images_fruits : # Réécriture du fichier
- for i, element in enumerate(self.readfile_images_fruits):
- self.file_images_fruits.write(self.readfile_images_fruits[i])
- for i in os.listdir(self.directory): # retourne la liste des fichiers ou dossiers présent dans le répertoire passé en argument
- if i.startswith("varietes_" + self.remove_fruit.lower()): # Suppression du fichier "varietes_xxxx" contenant le nom du fruit sans majuscule (.lower())
- os.remove(i)
- if self.directory + "/notes_" + self.remove_fruit.lower():
- os.remove(self.directory + "/notes_" + self.remove_fruit.lower()) # Suppression du fichier "notes_xxxx" contenant le nom du fruit sans majuscule.
- self.champ_remove.delete(0, 30) # Effacement du contenu du champ d'entrée
- self.show_list_fruits() # Appel de la méthode show_list_fruits()
- # ============MAIN PROGRAMM ================================================== :
- if __name__ == "__main__": # Partie du code qui s'exécute si le programme est lancé de manière autonome
- home = Home() # Création de l'objet home par instanciation de la classe Home
- home.home() # Appel de la méthode home (classe Home) sur l'objet home.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement