class Interface(Frame): """ """ def __init__(self, fenetre): Frame.__init__(self, fenetre) frame_gauche = Frame(fenetre) # partie boutons frame_droite = Frame(fenetre) # partie Image Module frame_gauche.pack(side=LEFT, fill="y") frame_droite.pack(side=RIGHT, fill="both", expand=1) frame_gauche.config(background="#303030") Bouton_A = Button( frame_gauche, text="Ouvrir fichier Arbre", fg="white", bg="#7F7F7F", highlightbackground="#303030", highlightthickness=3, command=self.openfile_Arbre, ).grid( row=0, column=0, sticky=W + N + E + S ) # ouvrir Arbre Bouton_B = Button( frame_gauche, text="Ouvrir fichier Liste", fg="white", bg="#7F7F7F", highlightbackground="#303030", highlightthickness=3, command=self.openfile_Liste, ).grid( row=1, column=0, sticky=W + N + E + S ) # ouvrir Liste self.texte = Label( frame_gauche, text="Pas d'arbre Ouvert", bg="#7F7F7F", highlightbackground="#303030", highlightthickness=3 ) self.texte.grid(row=2, column=0, sticky=W + N + E + S) # ouvrir Liste self.canvas = Canvas( frame_droite, background="#EDEDED", scrollregion=(0, 0, 1920, 1080) ) # partie ou on dessine les arbres # les ScrollBar de la partie ou on dessine hbar = Scrollbar(frame_droite, orient=HORIZONTAL, activebackground="#333333") hbar.pack(side=BOTTOM, fill=X) hbar.config(command=self.canvas.xview) vbar = Scrollbar(frame_droite, orient=VERTICAL, activebackground="#333333") vbar.pack(side=RIGHT, fill=Y) vbar.config(command=self.canvas.yview) # configuration du canevas dessin self.canvas.config( width=640, height=480, xscrollcommand=hbar.set, yscrollcommand=vbar.set, highlightbackground="#000000", borderwidth=1, highlightthickness=2, ) self.canvas.pack(expand=True, fill=BOTH) self.canvas.bind("<4>", lambda event: self.canvas.yview("scroll", -1, "units")) self.canvas.bind("<5>", lambda event: self.canvas.yview("scroll", 1, "units")) def openfile_Arbre(self): self.filename = askopenfilename(parent=self) try: f = open(self.filename) except IOError: print("Pas de fichier") return liste1 = f.readline() liste1 = eval(liste1) self.construct_Arbre("A", liste1) def openfile_Liste(self): self.filename = askopenfilename(parent=self) # POPUP self.popup = Toplevel() self.popup.title("Options d'ouverture") # choix binaire/n-aire self.radio_var = StringVar(self.popup) self.radio_var.set(1) binaire = Radiobutton( self.popup, text="Binaire", variable=self.radio_var, value=1, command=self.select_Naire ).grid(row=0, column=0, sticky=W) naire = Radiobutton( self.popup, text="N-aire", variable=self.radio_var, value=2, command=self.select_Naire ).grid(row=0, column=1, sticky=W) # choix methode construction lab_Methode = Label(self.popup, text="Methode de Construction :").grid(row=1, column=0, sticky=W) self.var_methode = StringVar(self.popup) self.var_methode.set("Arbre binaire Complet") self.listeMethode = OptionMenu(self.popup, self.var_methode, *dict[1].keys()) self.listeMethode.grid(row=1, column=1, sticky=W) # choix nombre d'arrete lab_nb_Arretes = Label(self.popup, text="Nombre d'arrete :").grid(row=2, column=0, sticky=W) self.nombre_arrete = StringVar() self.nombre_arrete.set(3) self.entry = Entry(self.popup, textvariable=self.nombre_arrete, state="disable") self.entry.grid(row=2, column=1, sticky=W) # Bouton_A = Button(self.popup, text="Annuler", command=self.popup.destroy).grid(row=3, column=1, sticky=W) Bouton_OK = Button(self.popup, text="OK", command=self.optionListe).grid(row=3, column=1, sticky=E) def select_Naire(self): if int(self.radio_var.get()) == 1: # si binaire self.entry.configure(state="disabled") # nombre d'arrete non modifiable # On change la liste des options d'ouverture liste = [i for i in dict[1].keys()] self.var_methode.set(liste[0]) menu = self.listeMethode["menu"] menu.delete(0, "end") for item in liste: menu.add_command(label=item, command=lambda item=item: self.var_methode.set(item)) elif int(self.radio_var.get()) == 2: # si n-naire self.entry.configure(state="normal") liste = [i for i in dict[2].keys()] self.var_methode.set(liste[0]) menu = self.listeMethode["menu"] menu.delete(0, "end") for item in liste: menu.add_command(label=item, command=lambda item=item: self.var_methode.set(item)) def optionListe(self): print("Vous Avez Choisi la : " + self.var_methode.get() + " nb arrete: " + str(self.nombre_arrete.get())) f = open(self.filename) liste1 = f.readlines() liste1 = [int(i) for i in liste1] methode = dict[int(self.radio_var.get())][self.var_methode.get()] self.construct_Arbre(methode, liste1, int(self.nombre_arrete.get())) self.popup.destroy() self.arbre.saveArbre("test1") def afficheArbre(self, arbre, x, y): self.canvas.create_line(x, y, x, y + 30, width=3) if arbre.sous_arbre: self.canvas.create_line( x - arbre.barycentre, y + 30, x + (arbre.longueur_Tige_Total - arbre.barycentre), y + 30, width=3 ) a, b = x - arbre.barycentre, y + 30 for i, elt in enumerate(arbre.sous_arbre): self.afficheArbre(elt, a + arbre.ecarts_Tiges[i], b) else: pconst = arbre.pprop self.canvas.create_oval( x - pconst // 2, y + 30, x + pconst // 2, y + 30 + (pconst), fill="deep sky blue", width=2 ) self.canvas.create_text(x, (y + 35 + (pconst // 4)), text=arbre.poids) def rollWheel(event): if event.num == 4: self.module.yview("scroll", -1, "units") elif event.num == 5: self.module.yview("scroll", 1, "units") def construct_Arbre(self, methode, liste, i=0): self.canvas.delete("all") self.arbre = Arbre(methode, liste, i) self.arbre.MAJ() self.arbre.calcul_Pos_SA() self.arbre.calcul_barycentre() self.texte.config(text=Arbre.typeArbre, fg="white") self.afficheArbre(self.arbre, 1920 // 2, 0)