diff --git a/seance4_4h/Exo1.py b/seance4_4h/Exo1.py new file mode 100644 index 0000000000000000000000000000000000000000..25597684f468a38085308363ab348859fc95a6fe --- /dev/null +++ b/seance4_4h/Exo1.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Oct 16 13:40:59 2020 + +@author: gabip +""" + +import random +from tkinter import * + +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 + boutonQuitter = Button(racine, text='Quitter') + boutonQuitter.pack(side=LEFT, padx=5, pady=5) + texteResultat = StringVar() + labelResultat = Label(racine, textvariable=texteResultat) + labelResultat.pack(side=LEFT, padx=10, pady=10) + boutonLancer = Button(racine, text='Tirage') + boutonLancer.pack(side=LEFT, padx=5, pady=5) + + + # 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 diff --git a/seance4_4h/Exo3.py b/seance4_4h/Exo3.py new file mode 100644 index 0000000000000000000000000000000000000000..d9ebf3d5e89a1cfb2ac6a59e8160c99fb1da8f70 --- /dev/null +++ b/seance4_4h/Exo3.py @@ -0,0 +1,85 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Oct 16 14:35:07 2020 + +@author: gabip +""" +from tkinter import * +from formes import * +from tkinter.colorchooser import askcolor + +class ZoneAffichage(Canvas): + def __init__(self, parent, largeur, hauteur): + Canvas.__init__(self, parent, width=largeur, height=hauteur) + self.forme_actuelle = 'Rectangle' + self.__ListeFormes=[] + self.__forme_deplacee = None + + def ajout_forme(self,x,y): + if self.forme_actuelle == 'Rectangle': + f= Rectangle(self,x, y ,20 ,10,'brown') + self.__ListeFormes.append(f) + else: + f= Ellipse(self,x,y,25,25,'brown') + self.__ListeFormes.append(f) + def selection_rectangle(self): + self.forme_actuelle='Rectangle' + def selection_ellipse(self): + self.forme_actuelle='Ellipse' + + def effacer(self,x,y): + for i in self.__ListeFormes: + if i.contient_point(x,y)==True: + i.effacer() + self.__ListeFormes.remove(i) + break + def color(self): + couleur=askcolor()[1] + for f in self.__ListeFormes: + f.change_couleur(couleur) + +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) + + boutonRectangle = Button(BarreOutils, text='Rectangle') + boutonRectangle.pack(side=LEFT, padx=5, pady=5) + boutonEllipse = Button(BarreOutils, text='Ellipse') + boutonEllipse.pack(side=LEFT, padx=5,pady=5) + boutonCouleur = Button(BarreOutils, text='Couleur') + boutonCouleur.pack(side=LEFT, padx=5,pady=5) + boutonQuitter = Button(BarreOutils, text='Quitter') + boutonQuitter.pack(side=LEFT, padx=5,pady=5) + + + self.__canevas = ZoneAffichage(self,600,400) + self.__canevas.pack(side=TOP, padx=10, pady=10) + self.__canevas.bind('<ButtonRelease-1>',self.release_canevas) + boutonRectangle.config(command=self.__canevas.selection_rectangle) + boutonEllipse.config(command=self.__canevas.selection_ellipse) + self.__canevas.bind('<Control-Button-1>',self.ctrlclick) + boutonCouleur.config(command=self.__canevas.color) + self.__canevas.bind('<Button-1>',self.clic_canevas) + + def release_canevas(self,event): + self.__canevas.ajout_forme(event.x,event.y) + + + + def ctrlclick(self,event): + self.__canevas.effacer(event.x,event.y) + + def clic_canevas(self,event): + pass + + +if __name__ == "__main__": + fen = FenPrincipale() + fen.mainloop() + + diff --git a/seance4_4h/brouillonBE4.py b/seance4_4h/brouillonBE4.py new file mode 100644 index 0000000000000000000000000000000000000000..d02f5cc138cbe1acc3152ddb97686fc8abf3d9c8 --- /dev/null +++ b/seance4_4h/brouillonBE4.py @@ -0,0 +1,44 @@ +# -*- coding: utf-8 -*- +""" +Created on Fri Oct 16 16:03:01 2020 + +@author: gabip +""" + +def choixrect(): + self.__selection='Rectangle' + def choixellipse(): + self.__selection='Ellipse' + +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) + + boutonRectangle = Button(BarreOutils, text='Rectangle',command=choixrect) + boutonRectangle.pack(side=LEFT, padx=5, pady=5) + boutonEllipse = Button(BarreOutils, text='Ellipse',command=choixellipse) + boutonEllipse.pack(side=LEFT, padx=5,pady=5) + boutonCouleur = Button(BarreOutils, text='Couleur') + boutonCouleur.pack(side=LEFT, padx=5,pady=5) + boutonQuitter = Button(BarreOutils, text='Quitter') + boutonQuitter.pack(side=LEFT, padx=5,pady=5) + + self.__canevas = ZoneAffichage(self,600,400) + self.__canevas.pack(side=TOP, padx=10, pady=10) + if self.__selection=='Rectangle': + self.__canevas.bind('<ButtonRelease-1>',self.release_canevas) + if self.__selection=='Ellipse': + self.canevas.bind('<ButtonRelease-1>',self.release_canevas2) + + def release_canevas(self,event): + self.__canevas.ajout_forme(event.x,event.y) + def release_canevas2(self,event): + self.__canevas.ajout_forme2(event.x,event.y) +if __name__ == "__main__": + fen = FenPrincipale() + fen.mainloop() diff --git a/seance4_4h/formes.py b/seance4_4h/formes.py index 964e35cbe688d0fbd2d88b01dffa8f70f6dc8320..6f7a039e342f68ef3415a7a3ec06d7f457481f84 100644 --- a/seance4_4h/formes.py +++ b/seance4_4h/formes.py @@ -19,7 +19,11 @@ class Rectangle(Forme): self._item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur) self.__l = l self.__h = h - + self.__couleur = couleur + + def change_couleur(self,c): + self.__couleur = c + def __str__(self): return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}" @@ -46,7 +50,11 @@ class Ellipse(Forme): self._item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur) self.__rx = rx self.__ry = ry - + self.__couleur = couleur + + def change_couleur(self,c): + self.__couleur = c + def __str__(self): return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}" diff --git a/seance4_4h/partie3.py b/seance4_4h/partie3.py new file mode 100644 index 0000000000000000000000000000000000000000..fa2d423bab0a22707a2ee73a103f40336dccddc6 --- /dev/null +++ b/seance4_4h/partie3.py @@ -0,0 +1,107 @@ +from tkinter import * +from tkinter import colorchooser # doit être importé manuellement +from formes import * + +class ZoneAffichage(Canvas): + def __init__(self, master, largeur, hauteur): + Canvas.__init__(self, master, width=largeur, height=hauteur) + self.__formes = [] + self.__type_forme = 'rectangle' + self.__couleur = 'brown' + self.__forme_deplacee = None + + def selection_rectangle(self): + self.__type_forme = 'rectangle' + + def selection_ellipse(self): + self.__type_forme = 'ellipse' + + def selection_couleur(self): + self.__couleur = colorchooser.askcolor()[1] + + def ajout_forme(self, x, y): + # Notez qu'on aurait aussi pu ajouter ce code en méthodes de Rectangle/Ellipse. + if self.__type_forme == 'rectangle': + f = Rectangle(self, x-5, y-10, 10, 20, self.__couleur) + elif self.__type_forme == 'ellipse': + f = Ellipse(self, x, y, 5, 10, self.__couleur) + self.__formes.append(f) + + def suppression_forme(self, x, y): + try: + i = next(i for i in range(len(self.__formes)-1, -1, -1) + if self.__formes[i].contient_point(x, y)) + f = self.__formes.pop(i) # on retire la forme de la liste + f.effacer() # puis on l'efface du canevas + except: + pass + + def deplacement_forme(self, x0, y0, x1, y1): + try: + if self.__forme_deplacee == None: + self.__forme_deplacee = next(f for f in reversed(self.__formes) + if f.contient_point(x0, y0)) + self.__forme_deplacee.deplacement(x1 - x0, y1 - y0) + except: + pass + + def fin_deplacement(self): + self.__forme_deplacee = None + + +class FenPrincipale(Tk): + def __init__(self): + Tk.__init__(self) + + # arbre de scène + self.configure(bg="grey") + barreOutils = Frame(self) + barreOutils.pack(side=TOP) + boutonRectangle = Button(barreOutils, text="Rectangle") + boutonRectangle.pack(side=LEFT, padx=5, pady=5) + boutonEllipse = Button(barreOutils, text="Ellipse") + boutonEllipse.pack(side=LEFT, padx=5, pady=5) + boutonCouleur = Button(barreOutils, text="Couleur") + boutonCouleur.pack(side=LEFT, padx=5, pady=5) + boutonQuitter = Button(barreOutils, text="Quitter") + boutonQuitter.pack(side=LEFT, padx=5, pady=5) + self.__canevas = ZoneAffichage(self, 600, 400) + self.__canevas.pack(side=TOP, padx=10, pady=10) + + # commandes + boutonRectangle.config(command=self.__canevas.selection_rectangle) + boutonEllipse.config(command=self.__canevas.selection_ellipse) + boutonCouleur.config(command=self.__canevas.selection_couleur) + boutonQuitter.config(command=self.destroy) + self.__canevas.bind("<Button-1>", self.clic_canevas) + self.__canevas.bind("<Control-ButtonRelease-1>", self.control_clic_canevas) + self.__deplacement_en_cours = False + self.__dernier_x = 0 + self.__dernier_y = 0 + self.__canevas.bind("<ButtonRelease-1>", self.release_canevas) + self.__canevas.bind("<B1-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_canevas(self, event): + if not self.__deplacement_en_cours: + self.__canevas.ajout_forme(event.x, event.y) + else: + self.__canevas.fin_deplacement() + self.__deplacement_en_cours = False + + def drag_canevas(self, event): + self.__canevas.deplacement_forme(self.__dernier_x, self.__dernier_y, event.x, event.y) + self.__deplacement_en_cours = True + self.__dernier_x = event.x + self.__dernier_y = event.y + + +if __name__ == '__main__': + fen = FenPrincipale() + fen.mainloop()