From f2223a70860df644d3d6beee2edf9d75820784e4 Mon Sep 17 00:00:00 2001 From: BenjaminNEGRE <71980886+BenjaminNEGRE@users.noreply.github.com> Date: Fri, 16 Oct 2020 17:43:45 +0200 Subject: [PATCH] BE4 --- seance4_4h/Exo1.py | 128 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 128 insertions(+) create mode 100644 seance4_4h/Exo1.py diff --git a/seance4_4h/Exo1.py b/seance4_4h/Exo1.py new file mode 100644 index 0000000..e1c38de --- /dev/null +++ b/seance4_4h/Exo1.py @@ -0,0 +1,128 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Oct 16 13:31:24 2020 + +@author: negre +""" + +import random +from tkinter import * + +#EX1 +''' +def tirage(): + nb = random.randint(1, 100) + texteResultat.set('Nombre : ' + str(nb)) + +if __name__ == '__main__': + + # création de l'arbre de scène + racine = Tk() # Appel à une méthode de classe (et non un constructeur, cf slide cours #2) + racine.title('Tirage aléatoire') + racine.geometry('300x100+400+400') + + # Les widgets de la scène + boutonLancer = Button(racine, text='Tirage') + boutonLancer.pack(side=RIGHT, padx=5, pady=5) + texteResultat = StringVar() + labelResultat = Label(racine, textvariable=texteResultat,fg="red") + labelResultat.pack(side=RIGHT, padx=7, pady=7) + boutonQuitter = Button(racine, text='Quitter') + boutonQuitter.pack(side=LEFT, padx=5, pady=5) + #Arbre de scène : 3 éléments + + # association des commandes aux widgets + boutonLancer.config(command=tirage) # appel dit callback (pas de parenthèses) + boutonQuitter.config(command=racine.destroy) # idem + racine.mainloop() # affichage de l'interface jusqu'à quit +''' +from formes import * +from tkinter import colorchooser + +class ZoneAffichage(Canvas): + def __init__(self, parent, largeur, hauteur): + Canvas.__init__(self, parent, width=largeur, height=hauteur) + self.formeActuelle="Rectangle" + self.__ListeFormes=[] + + def ajout_forme(self,x,y): + if self.formeActuelle=="Rectangle": + self.__ListeFormes.append(Rectangle(self, x-10, y+5, 20, 10, "brown")) + elif self.formeActuelle=="Ellipse": + self.__ListeFormes.append(Ellipse(self,x-5,y-10,25,25)) + + def delete_forme(self,x,y): + for f in self.__listeFormes: + if f.contient_point(x, y) == True : + f.effacer(self) + + def selection_rectangle(self): + self.formeActuelle="Rectangle" + + def selection_ellipse(self): + self.formeActuelle="Ellipse" + + def supression_forme(self,x,y): + try: + i=next(i for i in range(len(self.__formes)-1,-1,-1) if self.__formes[1].contient_point(x,y)) + + + + +class FenPrincipale(Tk): + def __init__(self): + Tk.__init__(self) + # L'initialisation de l'arbre de scène se fait ici + self.configure(bg='grey') + + barreOutils=Frame(self) + barreOutils.pack(side=TOP) + + bouttonRectangle=Button(barreOutils,text='Rectangle') + bouttonRectangle.pack(side=LEFT, padx=5, pady=5) + bouttonEllipse=Button(barreOutils,text='Ellipse') + bouttonEllipse.pack(side=LEFT, padx=5, pady=5) + bouttonCouleur=Button(barreOutils,text='Couleur') + bouttonCouleur.pack(side=LEFT, padx=5, pady=5) + bouttonQuitter=Button(barreOutils,text='Quitter') + bouttonQuitter.pack(side=LEFT, padx=5, pady=5) + + Canevas=ZoneAffichage(self,600,400) + Canevas.pack(side=TOP,padx=10,pady=10) + + self.__canevas.bind("<ButtonRelease-1>", self.release_canevas) + # Bind permet de relier les clics de souris sur le canevas + # Chaine de caract = commande ET release_canevas = commande renvoyant à la méthode décrite dessous + boutonRectangle.config(command=self.__canevas.selection_rectangle) + boutonEllipse.config(command=self.__canevas.selection_ellipse) + bouttonCouleur.config(command=self.__canevas.selection_couleur) + self.__canevas.bind("<Button-1>") + self.__canevas.bind("<ButtonRelease-1>", self.ctrl_release_canevas) + self.__deplacement_en_cours=FALSE + self.__dernier_x=0 + delf.__dernier_y=0 + self.__canevas.bind("<ButtonRelease-1>",self.release_canevas) + self.__canevas.bind("<M1-Motion>",self.drag_canevas) + + def clic_canevas(self,event): + self.__dernier_x=event.x + self.__dernier_y=event.y + + def control_clic_canevas(self,event): + self.__canevas.suppression_forme(event.x,event.y) + + + + def release_canvas(self,event): + if not self.__deplacement_en_cours: + self.__canvas.ajout_forme(event.x,event.y) + else: + self.__canevas.fin_deplacement() + self.__deplacement_en_cours=False + + def ctrl_release_canevas(self, event): + self.__canevas.delete_forme(event.x,event.y) + +if __name__ == "__main__": + fen = FenPrincipale() + fen.mainloop() \ No newline at end of file -- GitLab