def _modification(): def postaction(): ''' Actions à effectuer en sortie ''' name = saisie.get() if DEBUG: print("sortie:", saisie.get()) name_actif = sequence_active.name names = [seq.name for seq in liste_des_sequences] names = [n for n in names if n != name_actif] if name: if name in names: barre_de_message('Ce nom existe déjà', messager) else: barre_de_message('Séquence validée', messager) else: barre_de_message('Entrez un nom de séquence', messager) return None if sequence_active.is_invalide(): mess = 'Filtres incompatibles' barre_de_message(mess, messager) else : sequence_active.name = name barre_de_menu(lm_sequence, menu) liste_des_sequences.sort(key=lambda seq: seq.name) writesequences(liste_des_sequences) clear(fenetre) def annul(): barre_de_menu(lm_sequence, menu) clear(fenetre) barre_de_validation(menu, postaction, annul) saisie = regler_sequence(sequence_active, fenetre, messager)
def c_nouvelle_sequence(): ''' Crée une nouvelle séquence de filtres''' def postaction(): global sequence_active ''' Actions à effectuer en sortie ''' names = [seq.name for seq in liste_des_sequences] name = saisie.get() if name in names: mess = "Ce nom existe déjà !" barre_de_message(mess, messager) elif name == "": mess = 'Entrez un nom de séquence' barre_de_message(mess, messager) elif sequence.is_invalide(): mess = 'Filtres incompatibles' barre_de_message(mess, messager) else: sequence.name = name sequence_active = sequence barre_de_menu(lm_sequence, menu) liste_des_sequences.append(sequence) liste_des_sequences.sort(key=lambda seq: seq.name) writesequences(liste_des_sequences) clear(fenetre) def annul(): barre_de_menu(lm_sequence, menu) clear(fenetre) clear(fenetre) sequence = Sequence() barre_de_validation(menu, postaction, annul) saisie = regler_sequence(sequence, fenetre, messager)
def _selectionne_sequence(postaction): def validate(event=None): global sequence_active if DEBUG: print("Validation sequence") try: index_sequence, = menu_deroulant.curselection() except ValueError: barre_de_message('Sélectionnez une séquence', messager) return None sequence_active = liste_des_sequences[index_sequence] postaction() def escape(event=None): barre_de_menu(lm_sequence, menu) clear(fenetre) if DEBUG: print('chosir sequence') defilement = tk.Scrollbar(fenetre, orient='vertical') defilement.grid(row=1, column=2, sticky='ns') lab = tk.Label(fenetre, text='Choisir la séquence active') lab.grid(row=0, column=0, columnspan=2) noms_de_sequences = [seq.name for seq in liste_des_sequences] menu_deroulant = tk.Listbox(fenetre, yscrollcommand=defilement.set, height=9) defilement.configure(command=menu_deroulant.yview) menu_deroulant.bind("<Double-Button-1>", validate) menu_deroulant.grid(row=1, column=0, columnspan=2) for nom in noms_de_sequences: menu_deroulant.insert(tk.END, nom) #mini = tk.Frame(fenetre).grid(row=2, column=0) barre_de_validation(menu, validate, escape)
def c_modifier_filtre(): def validate(event=None): if DEBUG: print("validation") try: index_filtre, = menu_deroulant.curselection() clear(fenetre) c_regler_filtre(index_filtre) except ValueError: mess = 'Choisir le filtre à modifier' barre_de_message(mess, messager) #c_regler_filre() def annuler(): clear(fenetre) barre_de_menu(lm_filtre, menu) if DEBUG: print('modifier filtre') clear(fenetre) defilement = tk.Scrollbar(fenetre, orient='vertical') defilement.grid(row=1, column=1, sticky='ns') lab = tk.Label(fenetre, text='Choisir le filtre à modifier') lab.grid(row=0, column=0) noms_de_filtres = [f.name for f in liste_des_filtres] menu_deroulant = tk.Listbox(fenetre, yscrollcommand=defilement.set, height=9) defilement.configure(command=menu_deroulant.yview) menu_deroulant.bind("<Double-Button-1>", validate) menu_deroulant.grid(row=1, column=0) for nom in noms_de_filtres: menu_deroulant.insert(tk.END, nom) barre_de_validation(menu, validate, annuler)
def c_distribuer_donnes(): def validate(event=None): global pack_actif, index_pack try: saisie = int(saisir.get()) except ValueError: mess = 'Entrez un entier stictement positif' barre_de_message(mess, messager) return None if saisie in range(1, 1000): mess = 'Cela prend parfois quelques instants' barre_de_message(mess, messager) messager.update() compteur = 0 overflow = 0 pack_actif = [] index_pack = 0 while compteur <= saisie and overflow < 100_000: donne = Donne() overflow += 1 if (not sequence_active) or sequence_active.filtre(donne): compteur += 1 pack_actif.append(donne.identifiant()) if compteur == 0: mess = 'Filtres incompatibles' donne = Donne() pack_actif.append(donne.identifiant()) elif compteur > 0: mess = 'Donnes rares. Uniquement ' + str( compteur) + ' donnes distribuées' else: mess = 'Donnes distribuées' barre_de_message(mess, messager) barre_de_menu(lm_donne, menu) clear(fenetre) else: mess = 'Entrez un entier compris entre 1 et 1000' barre_de_message(mess, messager) def cancel(): clear(menu) barre_de_menu(lm_donne, menu) clear(fenetre) clear(fenetre) w1 = tk.Label(fenetre, text="Combien voulez-vous de donnes : ") w1.grid(row=0, column=0) saisir = tk.Entry(fenetre) saisir.grid(row=0, column=1) saisir.bind("<Return>", validate) if sequence_active: mess = "Séquence de filtres activés : " + sequence_active.name else: mess = 'Pas de filtre actif, donnes aléatoires ' w3 = tk.Label(fenetre, text=mess) w3.grid(row=1, columnspan=2) barre_de_validation(menu, validate, cancel) barre_de_message(mess, messager)
def c_sauvegarder_donnes(): if DEBUG: print("sauver") var = tk.StringVar(fenetre) def validate(event=None): text = var.get() if text: try: filename = "data/" + text + ".pak" with open(filename, "wb") as fichier: pickle.dump(pack_actif, fichier) wlabel.destroy() wentree.destroy() mess = f"Fichier {filename[5:]} sauvegardé" barre_de_message(mess, messager) if expert : barre_de_menu(lm_donne, menu) else : c_enchérir() except IOError: barre_de_message("Problème d'entrée/sortie", messager) def escape(event=None): if expert: clear(fenetre) barre_de_menu(lm_donne, menu) else: clear(fenetre) barre_de_menu(lm_proto_menu, menu) clear(fenetre) if len(pack_actif) < 5: mess = 'Attention, votre pack de donne est presque vide !' texte = f'nombre de sonnes à sauvegarder : {len(pack_actif)}' alerte1 = tk.Label(fenetre, text=texte) alerte1.grid() alerte2 = tk.Label(fenetre, text='Avez-vous bien distribué ?') alerte2.grid() tk.Label(fenetre, text='').grid() else: mess = 'Sauvegarde des donnes' barre_de_message(mess, messager) wlabel = tk.Label(fenetre, text="Nom du fichier") wlabel.grid() wentree = tk.Entry(fenetre, textvariable=var) wentree.grid() wentree.bind('<Return>', validate) barre_de_validation(menu, validate, escape)
def c_distribuer_donnes(): def validate(event=None): global pack_actif, index_pack try: saisie = int(saisir.get()) except ValueError: mess = 'Entrez un entier stictement positif' barre_de_message(mess, messager) return None if saisie in range(1, 1000): mess = 'Cela prend parfois quelques instants' barre_de_message(mess, messager) messager.update() index_pack = 0 if not sequence_active: pack_actif = [Donne() for i in range(saisie)] else: try : pack_actif = [] for i in range(saisie): donne = sequence_active.distribue() donneur = vardonneur.get() if donneur == 4 : donne.donneur = randint(0,3) else : donne.donneur = Position(donneur) vul = varvul.get() if vul == 4 : donne.vul = randint(0,3) else: donne.vul = Vulnerabilite(vul) pack_actif.append(donne.identifiant()) except InvalidSequence : mess = "Séquence invalide " barre_de_message(mess, messager) clear(menu) barre_de_menu(lm_sequence, menu) clear(fenetre) return None mess = 'Donnes distribuées' barre_de_message(mess, messager) if expert : barre_de_menu(lm_donne, menu) clear(fenetre) else : c_sauvegarder_donnes() else: mess = 'Entrez un entier compris entre 1 et 1000' barre_de_message(mess, messager) def cancel(): clear(menu) barre_de_menu(lm_donne, menu) clear(fenetre) clear(fenetre) w1 = tk.Label(fenetre, text="Combien voulez-vous de donnes ? : ") w1.grid(row=0, column=0) saisir = tk.Entry(fenetre) saisir.grid(row=0, column=1, columnspan=4) saisir.bind("<Return>", validate) if sequence_active: mess = "Séquence de filtres activés : " + sequence_active.name else: mess = 'Pas de filtre actif, donnes aléatoires ' w3 = tk.Label(fenetre, text=mess) w3.grid(row=1, column=0) vardonneur = tk.IntVar(fenetre) varvul = tk.IntVar(fenetre) tk.Label(fenetre, text="Donneur").grid(row=2, column=0) for pos in Position: b = tk.Radiobutton(fenetre, variable=vardonneur, text = pos.name(), value = int(pos), width=8, anchor="w" ) b.grid(row=2, column = pos+1) if pos ==0 : b.select() b = tk.Radiobutton(fenetre, variable=vardonneur, text = "aléatoire", value = 4, width=8, anchor="w" ) b.grid(row=2, column = 5) tk.Label(fenetre, text="Vulnérabilité").grid(row=3, column=0) for vul in Vulnerabilite: b = tk.Radiobutton(fenetre, variable=varvul, text = vul.name(), value = int(vul), width=8, anchor="w" ) b.grid(row=3, column = vul+1) if vul ==0 : b.select() b = tk.Radiobutton(fenetre, variable=varvul, text = "aléatoire", value = 4, width=8, anchor="w" ) b.grid(row=3, column = 5) barre_de_validation(menu, validate, cancel) mess = " Distribution des donnes " barre_de_message(mess, messager)