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/>
- #==== IMPORTATION DES MODULES ================================
- from tkinter import* # importation du module Tkinter
- import tkinter.filedialog # Importation du sous-module filedialog nécessaire pour utiliser askopenfilename()
- import tkinter.messagebox
- import os # Importation du module os (actions liées au système d'exploitation)
- from PIL import Image, ImageTk # Module PIL (traitement des images importées)
- import shutil # module servant à copier-coller des fichiers
- from datetime import datetime
- ##############################################################
- # TO-DO LIST : #
- # #
- # - Inclure l'année #
- # - Empêcher redimensionnement des fenêtres #
- # #
- ##############################################################
- #==== CLASSES ================================================
- class Legumes(object):
- "Instanciation de la page des légumes"
- #---- Méthode ------------------------------------------------
- def __init__(self, image_legume, vegetable_title, file_varietes, file_notes):
- "Méthode constructeur"
- # Retourne le répertoire courant sous la forme d'une chaîne de caractères:
- self.directory = os.getcwd()
- self.image_legume = image_legume
- self.vegetable_title = vegetable_title
- self.file_varietes = file_varietes
- self.file_notes = file_notes
- # Variables gérant l'apparition des fenêtres pop-up (fenêtres d'information):
- #self.i3 = 0
- self.i4 = 0
- self.i8 = 0
- #---- Méthode ------------------------------------------------
- def legumes(self):
- "Création de la page légumes"
- self.fenetre_principale = Tk()
- self.fenetre_principale.title("Légumes")
- self.main_frame = Frame(self.fenetre_principale, height = 700, width = 1100, bg= 'white', relief = 'ridge', bd = 0, padx = 10, pady = 10)
- self.main_frame.grid()
- self.main_frame.grid_propagate(0)
- # Importation et traitement des images:
- self.icones = ["/images/enregistrer.png", "/images/corbeille.png"]
- self.icones_open = [Image.open(self.directory + i) for i in self.icones]
- self.icones_size = (64, 64)
- self.icones_size2 = (32, 32)
- [i.thumbnail(self.icones_size) for i in self.icones_open]
- self.photos_icones = [ImageTk.PhotoImage(i, master = self.fenetre_principale) for i in self.icones_open]
- self.label_donnees = LabelFrame(self.main_frame, bd = 0, bg = "white", highlightthickness = 0)
- self.label_donnees.grid(row = 0, column = 3, sticky = 'nswe', padx = 10, pady = 3)
- self.icones_open[1].thumbnail(self.icones_size2)
- self.photo_icone_save_file = ImageTk.PhotoImage(self.icones_open[1], master = self.fenetre_principale)
- self.button_save_file = Button(self.label_donnees, bg ='white', bd = 1, image = self.photo_icone_save_file, command = self.info_destroy_file)
- self.button_save_file.grid(row = 0, column = 0, sticky = 'nswe')
- self.titre_donnees = Label(self.label_donnees, text = "Données enregistrées", bd = 0, bg = 'green', fg = 'white', relief = 'ridge', font = "Times 16 bold", highlightthickness = 0, padx = 187)
- self.titre_donnees.grid(row = 0, column = 1, sticky = 'nswe')
- # Création du widget "Données enregistrées" (pour chaque variété de légumes:
- self.editeur_defil = Scrollbar(self.fenetre_principale, bg = "green", relief='ridge', width=18, orient = 'vertical', cursor ='hand2', troughcolor = 'white', activebackground = 'green')
- self.editeur_defil.grid(row = 0,column = 1, rowspan = 2, sticky = 'ns')
- self.editeur = Text(self.main_frame, height = 24, width = 52, bg = 'white', highlightbackground = "grey", bd = 2, relief = 'flat', font = 'Times 16', padx = 11, pady = 8, wrap = 'word', yscrollcommand = self.editeur_defil.set)
- self.editeur.grid(row = 0, column = 3, rowspan = 2,padx = 10, pady = 5, sticky = 'swe')
- self.editeur_defil.config(command = self.editeur.yview)
- # Création du widget "Observations":
- self.notes_defil = Scrollbar(self.main_frame, bg = "green", relief = 'ridge', width = 18, orient = 'vertical', cursor = 'hand2', troughcolor = 'white', activebackground = 'green')
- self.notes_defil.grid(row = 1,column = 2, sticky = 'nsw', pady = 10)
- self.notes = Text(self.main_frame, height = 8, width = 39, bg='white', highlightbackground = "grey", bd = 2, relief = 'flat', font='Times 16', padx=11, pady=8, wrap='word', yscrollcommand = self.notes_defil.set)
- self.notes.grid(row = 1, column = 0, columnspan = 2, pady = 10, sticky = 'nsew')
- self.notes_defil.config(command = self.notes.yview)
- self.notes.insert(1.0, "Observations\n")
- self.notes.tag_add('titel', '1.0', '1.20')
- self.notes.tag_config('titel', foreground = "green", justify='center', underline = 1, font='Times 16 bold')
- # Affichage des notes et observations de la variété de légume sélectionnée:
- with open(self.file_notes, 'r') as self.file :
- self.readfile_notes = self.file.readlines()
- [self.notes.insert('end', self.readfile_notes[i]) for i, element in enumerate(self.readfile_notes)]
- # Importation et traitement de l'image illustrant le bouton d'enregistrement du widget "Notes":
- self.icones_open[0].thumbnail(self.icones_size2)
- self.photo_icone_save_note = ImageTk.PhotoImage(self.icones_open[0], master = self.fenetre_principale)
- self.button_save_note = Button(self.main_frame, bg ='white', bd = 1, image = self.photo_icone_save_note, command = self.save_notes)
- self.button_save_note.grid(row = 1, column = 0, rowspan = 2, padx = 5, pady = 15, sticky = 'nw')
- self.method_widgets() # Appel de méthode
- #---- Méthode ------------------------------------------------
- def method_widgets(self, image_legume = None):
- "Création de la fenêtre contenant les champs d'entrée"
- # Destruction éventuelle de la fenêtre précédente :
- for child in self.main_frame.winfo_children():
- if child.winfo_class() == "Canvas":
- child.destroy()
- if image_legume != None:
- self.image_legume = image_legume
- # Traitement de l'image illustrant le légume:
- self.image_open = Image.open(self.directory + self.image_legume)
- self.image_size = (96, 96)
- self.image_open.thumbnail(self.image_size)
- self.photo_legume = ImageTk.PhotoImage(self.image_open, master = self.fenetre_principale)
- # Création de la fenêtre contenant les champs d'entrée:
- self.widgets = Canvas(self.main_frame, height = 500, width = 800, bg = 'white', bd = 2, relief = 'ridge', highlightthickness = 0)
- self.widgets.grid(row = 0, column = 0, columnspan = 3, sticky = 'ns', pady = 3)
- self.picture_button = Button(self.widgets, bg = 'white', bd = 0, image = self.photo_legume, command = self.agrandir_remplacer)
- self.picture_button.grid(row = 0, column = 0, padx = 5, pady = 10)
- self.titre = Label(self.widgets, text = self.vegetable_title, bg = 'white', fg = "black", font = 'Times 20 bold', padx = 5, pady = 5)
- self.titre.grid(row = 0,column = 1, columnspan = 2, sticky = 'n', padx = 5, pady = 5)
- self.espece = Label(self.widgets, text = 'Variétés :', font = 'Times 16', bg = 'white')
- self.espece.grid(row = 1, column = 0, sticky = 'ne', padx = 5, pady = 5)
- self.listbox_varietes() # Appel de méthode
- #---- Méthode ------------------------------------------------
- def listbox_varietes(self) :
- "Création de la Listbox affichant les variétés du légume"
- for child in self.widgets.winfo_children():
- if child.winfo_class() == "Listbox":
- child.destroy()
- self.varietes = []
- with open(self.file_varietes,'r') as self.file:
- self.readfile_varietes = self.file.readlines()
- [self.varietes.append(self.readfile_varietes[i].replace("\n", "")) for i in range (0, len(self.readfile_varietes))] # Compréhension de liste
- self.listlegume = StringVar()
- self.y_defil_liste = Scrollbar(self.widgets, bg = "green", relief='ridge', width= 14, orient='vertical', cursor='hand2', troughcolor = 'white', activebackground = 'green')
- self.y_defil_liste.grid(row = 1, column = 2, sticky='nsw', pady = 6)
- self.liste = Listbox(self.widgets, listvariable = self.listlegume, activestyle = 'dotbox', bd = 1, bg = 'white', font = 'Times 16', selectmode = 'browse', width = 20, height = 5, selectbackground = 'green', selectforeground = 'white', selectborderwidth = 1, yscrollcommand = self.y_defil_liste.set)
- self.liste.grid(row = 1, column = 1, sticky = 'nsew', pady = 5)
- self.y_defil_liste.config(command = self.liste.yview)
- self.liste_legumes = []
- self.liste_legumes.append(" Rajouter une variété")
- self.liste_legumes.append(" Supprimer une variété")
- [self.liste_legumes.append(self.varietes[i]) for i, element in enumerate(self.varietes)]
- for i in range(0, len(self.liste_legumes)) :
- self.liste.insert(i, self.liste_legumes[i])
- self.liste.bind('<Return>', self.choice)
- self.listlegume.set(self.liste_legumes)
- self.listlegume.get()
- self.liste.itemconfig(self.liste_legumes.index(" Rajouter une variété"), selectbackground = "green", selectforeground = "white", foreground = "green")
- self.liste.itemconfig(self.liste_legumes.index(" Supprimer une variété"), selectbackground = "red", selectforeground = "white", foreground = "red")
- # Instanciation des entrées :
- self.date_weight = LabelFrame(self.widgets, bg = 'white')
- self.date_weight.grid(row = 2, column = 0, columnspan = 3, padx = 30, pady = 10)
- self.date = Label(self.date_weight, text = 'Date de récolte :', font = 'Times 16', bg = 'white')
- self.date.grid(row = 0, column = 0, sticky = 'e', padx = 5, pady = 5)
- self.entree_date = Entry(self.date_weight, width = 15, font = 'Times 16', bd = 2, bg = '#EFEFEF', relief = 'ridge', state = 'disabled', takefocus = 0)
- self.entree_date.grid(row = 0, column = 1, sticky = 'w', padx = 5, pady = 5)
- self.weight = Label(self.date_weight, text = 'Poids (en Kg) :', font = 'Times 16', bg = 'white')
- self.weight.grid(row = 1, column = 0, sticky = 'e', padx = 5, pady = 5)
- self.entry_weight = Entry(self.date_weight, width = 15, font = 'Times 16', state = 'disabled', bd = 2, bg = '#EFEFEF', relief = 'ridge', takefocus = 0)
- self.entry_weight.grid(row = 1, column = 1, sticky = 'w', padx = 5, pady = 5)
- self.total_weight = Label(self.date_weight, text = 'Total (en Kg) :', font = 'Times 16', bg = 'white')
- self.total_weight.grid(row = 2, column = 0, sticky = 'w', padx = 5, pady = 5)
- self.entry_weight_total = Entry(self.date_weight, width = 15, font = 'Times 16', state = 'disabled', bd = 2, bg = '#EFEFEF', relief = 'ridge', takefocus = 0)
- self.entry_weight_total.grid(row = 2, column = 1, sticky = 'w', padx = 5, pady = 5)
- # Fenêtre pop-up
- self.selection = tkinter.messagebox.showinfo("Votre sélection", 'Faites votre choix dans la liste déroulante et pressez la touche "Entrée".')
- self.chosen = self.liste.curselection()
- #---- Méthode ------------------------------------------------
- def choice(self, event = None):
- "Méthode qui sélectionne une variété"
- self.chosen = self.liste.curselection()
- if self.chosen == (0,):
- self.rajout = Toplevel()
- self.rajout.title("Rajouter une variété")
- self.champ_rajout = Entry(self.rajout, width = 35, bg = 'green', fg = 'white', font = "Times 16")
- self.champ_rajout.grid()
- self.champ_rajout.insert(0, " Entrez le nom de la variété à rajouter.")
- self.rajout.after(1500, self.videEntreeRajout)
- self.champ_rajout.bind('<Return>', self.save_new_variety)
- elif self.chosen == (1,):
- self.suppression = Toplevel()
- self.suppression.title("Supprimer une variété")
- self.champ_suppression = Entry(self.suppression, width = 35, bg = 'red', fg = 'white', font = "Times 16")
- self.champ_suppression.grid()
- self.champ_suppression.insert(0, " Entrez le nom de la variété à supprimer.")
- self.suppression.after(1500, self.videEntreeSuppression)
- self.champ_suppression.bind('<Return>', self.suppress_variety)
- elif self.chosen != (0,) and self.chosen != (1,) :
- self.editeur.delete(1.0, 'end')
- self.affichage() # Appel de méthode
- #---- Méthode ------------------------------------------------
- def affichage(self, event = None) :
- "Affichage des données de la variété sélectionnée"
- while self.i8 < 1 :
- self.message1 = tkinter.messagebox.showinfo('Date et poids', 'Entrez la date de récolte et le poids. Puis cliquez sur le bouton d\'enregistrement ou pressez la touche "Entrée".')
- self.i8 += 1
- with open(self.file_varietes, 'r') as self.file:
- self.readfile = self.file.readlines()
- for i in range(0, len(self.readfile)) :
- if self.chosen == (i + 2,) :
- self.entree_date.focus_set()
- self.entree_date.delete(0, 15)
- self.entree_date.config(bg = 'white', fg = 'black')
- self.entry_weight_total.delete(0, 15)
- self.today = datetime.now()
- self.jour_actuel = str(self.today.day) + "/" + str(self.today.month) + "/" + str(self.today.year)
- self.entree_date.config(state = 'normal')
- self.file_variete = open(self.file_varietes + "_" + str(i + 1), 'a')
- self.file_variete.close()
- with open(self.file_varietes + "_" + str(i + 1), 'r') as self.file_variete:
- self.readfile_variete = self.file_variete.readlines()
- self.total_weight_variete = open(self.file_varietes + "_" + str(i + 1) + '_PT', 'a')
- self.total_weight_variete.close()
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'r') as self.total_weight_variete:
- self.readfile_PT = self.total_weight_variete.readline()
- self.entry_weight_total.configure(state = 'normal')
- self.entry_weight_total.insert(0, self.readfile_PT)
- self.list_edit = []
- for i2 in range (len(self.readfile_variete), 0, -2):
- self.edit = Label(self.editeur, width = 55, justify = 'left', bg = '#EFEFEF', text = str(self.readfile_variete[i2-2]) + str(self.readfile_variete[i2-1]).strip(), highlightthickness = 2, highlightcolor = "red", highlightbackground = "green", font = "Times 14", anchor = 'w', padx = 10, pady = 10, takefocus = 1)
- self.editeur.window_create('end', window=self.edit, padx=10, pady=10)
- self.object_edit = Label_Bind(self.entry_weight_total, self.chosen, self.edit, self.image_legume, self.vegetable_title, self.file_varietes, self.file_notes)
- self.list_edit.append(self.object_edit)
- for i3 in range(0, len(self.list_edit)):
- self.list_edit[i3].label_bind()
- # self.edit.insert('end', str(self.readfile_variete[i2-2]) + str(self.readfile_variete[i2-1]) + '\n')
- #while self.i3 < 1 :
- self.entree_date.insert(0, self.jour_actuel)
- #self.i3+=1
- self.entree_date.bind('<Return>', self.entree_poids)
- #self.entree_date.bind('<Tab>', self.entree_poids)
- #---- Méthode ------------------------------------------------
- def entree_poids(self, event) :
- "Méthode qui enregistre la date (provisoirement)"
- self.editeur.delete(1.0, 'end')
- self.entry_weight.config(state='normal')
- self.tentative_date = self.entree_date.get()
- if len(self.tentative_date) < 7:
- self.signaleErreurDate()
- else:
- try:
- self.verif2 = int(self.tentative_date[-4:len(self.tentative_date)])
- except:
- self.signaleErreurDate()
- else:
- self.entree_date.delete(0, 30)
- self.entree_date.insert(0, 'Enregistré')
- self.entry_weight.focus_set()
- while self.i4 < 1 :
- self.entry_weight.configure(bg = 'green', fg='white')
- self.entry_weight.insert(0, 'Exemple : 2.5')
- self.widgets.after(1500, self.videEntreePoids)
- self.i4 += 1
- self.entry_weight.bind('<Return>', self.date_poids_recolte)
- self.editeur.insert('end', "- " + self.tentative_date + "\n")
- self.entree_date.config(bg = "green", fg = "white")
- #---- Méthode ------------------------------------------------
- def date_poids_recolte(self, event):
- "Méthode qui enregistre la date et le poids récolté"
- self.tentative_poids = self.entry_weight.get()
- try:
- self.tentative_poids = str(round(float(self.tentative_poids), 2))
- except:
- self.signaleErreurPoids()
- else:
- self.editeur.insert('end', '- ' + str(self.tentative_poids) + ' Kg\n')
- self.entry_weight.delete(0, 30)
- self.entry_weight.configure(bg = 'green', fg = 'white')
- self.entry_weight.insert(0, 'Enregistré')
- self.widgets.after(1000, self.videEntreePoids)
- self.entree_date.delete(0, 30)
- self.entree_date.config(bg = 'white', fg = 'black')
- self.entree_date.insert(0, self.jour_actuel)
- self.liste.focus_force()
- self.choice()
- with open(self.file_varietes, 'r') as self.file:
- self.readfile = self.file.readlines()
- for i in range(0, len(self.readfile)) :
- if self.chosen == (i + 2,) :
- with open(self.file_varietes + "_" + str(i + 1), 'a') as self.file_variete:
- self.file_variete.write("- Date de récolte: " + self.tentative_date + "\n")
- self.file_variete.write('- Poids (en Kg): ' + str(self.tentative_poids) + '\n')
- self.total_weight_variete = open(self.file_varietes + "_" + str(i + 1) + '_PT', 'a')
- self.total_weight_variete.close()
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'r') as self.total_weight_variete:
- self.readfile_PT = self.total_weight_variete.readline()
- if self.readfile_PT == '':
- self.readfile_PT = 0
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'w') as self.total_weight_variete:
- self.total_weight_variete.write(str(float(self.readfile_PT) + float(self.tentative_poids)))
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'r') as self.total_weight_variete:
- self.readfile_PT = self.total_weight_variete.readline()
- self.entry_weight_total.delete(0, 15)
- self.entry_weight_total.configure(state = 'normal')
- self.entry_weight_total.insert(0, self.readfile_PT)
- with open(self.file_varietes + "_" + str(i + 1), 'r') as self.file_variete:
- self.readfile_variete = self.file_variete.readlines()
- self.editeur.delete(1.0, 'end')
- self.list_edit = []
- for i2 in range (len(self.readfile_variete), 0, -2):
- self.edit = Label(self.editeur, width = 55, justify = 'left', bg = '#EFEFEF', text = str(self.readfile_variete[i2-2]) + str(self.readfile_variete[i2-1]).strip(), highlightthickness = 2, highlightcolor = "red", highlightbackground = "green", font = "Times 14", anchor = 'w', padx = 10, pady = 10)
- self.editeur.window_create('end', window=self.edit, padx=10, pady=10)
- self.object_edit = Label_Bind(self.entry_weight_total, self.chosen, self.edit, self.image_legume, self.vegetable_title, self.file_varietes, self.file_notes)
- self.list_edit.append(self.object_edit)
- for i3 in range(0, len(self.list_edit)):
- self.list_edit[i3].label_bind()
- #self.edit.insert('end', str(self.readfile_variete[i2-2]) + str(self.readfile_variete[i2-1]) + '\n')
- #---- Méthode ------------------------------------------------
- def save_file(self):
- "Enregistrement des changements dans les données de la variété sélectionnée."
- self.new_file = self.editeur.get(1.0, 'end')
- with open(self.file_varietes, 'r') as self.file:
- self.readfile = self.file.readlines()
- for i in range(0, len(self.readfile)) :
- if self.chosen == (i + 2,) :
- with open(self.file_varietes + "_" + str(i + 1), 'w') as self.file_variete:
- self.file_variete.write(self.new_file)
- #---- Méthode ------------------------------------------------
- def save_new_variety(self, event):
- "Enregistrement d'une nouvelle variété de légumes"
- self.new_variety = self.champ_rajout.get()
- self.rajout.destroy()
- with open(self.file_varietes, 'a') as self.file:
- self.file.write(" " + self.new_variety.capitalize() + "\n")
- with open(self.file_varietes, 'r') as self.file:
- self.readfile = self.file.readlines()
- self.file_variete = open(self.file_varietes + "_" + str(len(self.readfile)), 'a')
- self.file_variete.close()
- self.total_weight_variete = open(self.file_varietes + "_" + str(len(self.readfile)) + '_PT', 'a')
- self.total_weight_variete.write('0')
- self.total_weight_variete.close()
- self.listbox_varietes()
- #---- Méthode ------------------------------------------------
- def suppress_variety(self, event):
- "Suppression d'une variété de légumes"
- self.confirmation_suppression = tkinter.messagebox.askokcancel("Supprimer?", "Voulez-vous vraiment supprimer cette variété?\nCette opération est irréversible et détruira toutes les données enregistrées.")
- if self.confirmation_suppression == True:
- self.old_variety = self.champ_suppression.get().lower()
- self.suppression.destroy()
- print(self.old_variety)
- with open(self.file_varietes, 'r') as self.file:
- self.readfile_varietes = self.file.readlines()
- print(self.readfile_varietes)
- for i in range(0, len(self.readfile_varietes)) :
- if self.old_variety == self.readfile_varietes[i].strip() :
- try:
- os.remove(self.directory + "/" + self.file_varietes + "_" + str(i + 1))
- except:
- self.file_variete = open(self.file_varietes + "_" + str(i + 1), 'a')
- try:
- os.remove(self.directory + "/" + self.file_varietes + "_" + str(i + 1) + '_PT')
- except:
- self.total_weight_variete = open(self.file_varietes + "_" + str(i + 1) + '_PT', 'a')
- print(self.readfile_varietes[i].strip())
- print(self.old_variety)
- [self.readfile_varietes.remove(i) for i in self.readfile_varietes if " " + self.old_variety.capitalize() + "\n" == i]
- with open(self.file_varietes, 'w') as self.file:
- [self.file.write(i) for i in self.readfile_varietes]
- self.listbox_varietes()
- #---- Méthode ------------------------------------------------
- def agrandir_remplacer(self):
- "Agrandir ou pivoter la photo?"
- self.image_resize = "/images/resize.png"
- self.image4 = Image.open(self.directory + self.image_resize)
- self.image4_size = 96, 96
- self.image4.thumbnail(self.image4_size) # Redimensionnement de l'image
- self.photo_resize = ImageTk.PhotoImage(self.image4)
- self.image_replace = "/images/default_image.png"
- self.image5 = Image.open(self.directory + self.image_replace)
- self.image5_size = 96, 96
- self.image5.thumbnail(self.image5_size) # Redimensionnement de l'image
- self.photo_rotate = ImageTk.PhotoImage(self.image5)
- self.choix = Toplevel(name = 'selected', bg = 'white')
- self.label_agrandir_remplacer = Label(self.choix, bg = 'white', fg = 'black', text = "Voulez-vous agrandir\nou remplacer la photo?", font = ('Times', '14', 'bold'))
- self.label_agrandir_remplacer.grid(row = 0, column = 0, columnspan = 2, padx = 10, pady = 5)
- self.agrandissement = Button(self.choix, image = self.photo_resize, bg = 'black', bd = 2, highlightthickness = 1, command = self.photo_agrandie)
- self.agrandissement.grid(row = 1, column = 0, sticky = 'w', padx = 10, pady = 10)
- self.replace_image = Button(self.choix, image = self.photo_rotate, bg = 'black', bd = 2, highlightthickness = 1, command = self.replace_photo)
- self.replace_image.grid(row = 1, column = 1, sticky = 'w', padx = 10, pady = 10)
- #---- Méthode ------------------------------------------------
- def photo_agrandie(self) :
- "Méthode permettant d'agrandir les photos"
- self.grande_photo = Toplevel() #name = 'selected')
- self.image_open2 = Image.open(self.directory + self.image_legume)
- self.great_picture = ImageTk.PhotoImage(self.image_open2)
- if self.image_open2.size[0] > 768 and self.image_open2.size[1] > 768:
- self.image_legume_size = 1024, 1024
- self.image_open2.thumbnail(self.image_legume_size)
- self.great_picture = ImageTk.PhotoImage(self.image_open2)
- self.label_photo = Label(self.grande_photo, image = self.great_picture)
- self.label_photo.grid()
- #---- Méthode ------------------------------------------------
- def replace_photo(self):
- "Remplacement de photos"
- self.choose_picture = tkinter.filedialog.askopenfilename(title="Importer une image",filetypes=[('png files','.png'),('all files','.*')])
- self.basename = os.path.basename(self.choose_picture)
- shutil.copy(self.choose_picture, "images/images_importees")
- with open("images_legumes", 'r') as self.file_images_legumes:
- self.readfile_images_legumes = self.file_images_legumes.readlines()
- for i in self.readfile_images_legumes:
- if i == self.image_legume + "\n":
- self.loc = self.readfile_images_legumes.index(i)
- self.readfile_images_legumes.remove(i)
- if i != "/images/default_image.png\n":
- os.remove(self.directory + i.strip())
- self.readfile_images_legumes.insert(self.loc, "/images/images_importees/" + self.basename + "\n")
- with open("images_legumes", 'w') as self.file_images_legumes :
- [self.file_images_legumes.write(self.readfile_images_legumes[i]) for i, element in enumerate(self.readfile_images_legumes)]
- self.info_modif = tkinter.messagebox.showinfo("Nouvelle photo", "La modification prendra effet au prochain redémarrage du programme.")
- #---- Méthode ------------------------------------------------
- def save_notes(self):
- "Enregistrement des notes"
- self.new_notes = self.notes.get(2.0, 'end')
- with open(self.file_notes, 'w') as self.file :
- self.file.write(self.new_notes)
- #---- Méthode ------------------------------------------------
- def info_destroy_file(self):
- "Information sur la suppression d'une entrée"
- print(self.chosen)
- if self.chosen != () and self.chosen != (0,) and self.chosen != (1,):
- self.warning = tkinter.messagebox.showinfo('Supprimer une entrée', "Cliquez sur l'entrée que vous souhaitez supprimer et confirmez la suppression.")
- # METHODES DE GESTION DES ERREURS :
- def signaleErreurDate(self):
- self.entree_date.configure(bg ='red', fg='white')
- self.entree_date.delete(0,15)
- self.entree_date.insert(0, 'Format invalide')
- self.widgets.after(1000, self.videEntreeDate)
- #---- Méthode ------------------------------------------------
- def videEntreeDate(self):
- self.entree_date.configure(bg ='white', fg='black')
- self.entree_date.delete(0, 15)
- #---- Méthode ------------------------------------------------
- def signaleErreurPoids(self):
- self.entry_weight.configure(bg ='red', fg='white')
- self.entry_weight.delete(0,15)
- self.entry_weight.insert(0, 'Format invalide')
- self.widgets.after(1000, self.videEntreePoids)
- #---- Méthode ------------------------------------------------
- def videEntreePoids(self):
- self.entry_weight.configure(bg ='white', fg='black')
- self.entry_weight.delete(0, 15)
- #---- Méthode ------------------------------------------------
- def signaleErreurRecherche(self):
- self.entree_recherche.configure(bg ='red', fg='white')
- self.entree_recherche.delete(0,30)
- self.entree_recherche.insert(0, 'Aucun résultat')
- self.can.after(1000, self.videEntreeRecherche)
- #---- Méthode ------------------------------------------------
- def videEntreeRecherche(self):
- self.entree_recherche.configure(bg ='white', fg='black')
- self.entree_recherche.delete(0, 30)
- #---- Méthode ------------------------------------------------
- def videEntreeRajout(self):
- self.champ_rajout.configure(bg = 'white', fg = 'black')
- self.champ_rajout.delete(0, 45)
- self.champ_rajout.focus_set()
- #---- Méthode ------------------------------------------------
- def videEntreeSuppression(self):
- self.champ_suppression.configure(bg = 'white', fg = 'black')
- self.champ_suppression.focus_set()
- self.champ_suppression.delete(0, 45)
- class Label_Bind(Legumes):
- def __init__(self, entry_weight_total,chosen, edit, image_legume, vegetable_title, file_varietes, file_notes):
- "Constructeur"
- Legumes.__init__(self, image_legume, vegetable_title, file_varietes, file_notes)
- self.entry_weight_total = entry_weight_total
- self.chosen = chosen
- self.edit = edit
- #---- Méthode ------------------------------------------------
- def label_bind(self):
- self.edit.bind('<Enter>', lambda event: self.select_label(self.edit))
- self.edit.bind('<Leave>', lambda event: self.deselect_label(self.edit))
- def select_label(self, edit):
- self.edit = edit
- self.edit.configure(highlightbackground = "red")
- self.edit.bind('<Button-1>', lambda event: self.destroy_file(self.edit))
- def deselect_label(self, edit):
- self.edit = edit
- self.edit.configure(highlightbackground = "green")
- def destroy_file(self, edit):
- "Méthode de destruction de l'entrée sélectionnée"
- self.edit = edit
- self.edit.unbind('<Button-1>')
- self.warning2 = tkinter.messagebox.askokcancel('Supprimer une entrée', "Voulez-vous vraiment supprimer cette entrée?")
- if self.warning2 == True:
- self.recup_text = self.edit['text']
- self.poids_a_retrancher = float(self.recup_text[self.recup_text.index(":", 35) + 2:])
- self.recup_text = self.recup_text.split('\n')
- with open(self.file_varietes, 'r') as self.file:
- self.readfile = self.file.readlines()
- for i in range(0, len(self.readfile)) :
- if self.chosen == (i + 2,) :
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'r') as self.total_weight_variete:
- self.readfile_PT = self.total_weight_variete.readline()
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'w') as self.total_weight_variete:
- self.total_weight_variete.write(str(float(self.readfile_PT) - self.poids_a_retrancher))
- with open(self.file_varietes + "_" + str(i + 1) + '_PT', 'r') as self.total_weight_variete:
- self.readfile_PT = self.total_weight_variete.readline()
- self.entry_weight_total.delete(0, 15)
- self.entry_weight_total.configure(state = 'normal')
- self.entry_weight_total.insert(0, self.readfile_PT)
- with open(self.file_varietes + "_" + str(i + 1), 'r') as self.file_variete:
- self.readfile_variete = self.file_variete.readlines()
- for i2 in range(0, len(self.recup_text)):
- self.recup_text[i2] = self.recup_text[i2] + '\n'
- for i2 in range(0, len(self.recup_text)):
- if i2 % 2 == 0 :
- for i3 in range(0, len(self.readfile_variete)):
- if i3 % 2 == 0 :
- if self.recup_text[i2] + self.recup_text[i2 + 1] == self.readfile_variete[i3] + self.readfile_variete[i3 + 1]:
- self.readfile_variete[i3:i3 + 2] = []
- break
- with open(self.file_varietes + "_" + str(i + 1), 'w') as self.file_variete:
- for i in range(0, len(self.readfile_variete)):
- self.file_variete.write(self.readfile_variete[i])
- self.edit.destroy()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement