Skip to content
Snippets Groups Projects
Commit b13a6f34 authored by GParamucchio's avatar GParamucchio
Browse files

J'ai répondu jusqu'à la question 7 du BE4

parent 0215c970
No related branches found
No related tags found
No related merge requests found
# -*- 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
# -*- 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()
# -*- 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()
...@@ -19,7 +19,11 @@ class Rectangle(Forme): ...@@ -19,7 +19,11 @@ class Rectangle(Forme):
self._item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur) self._item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur)
self.__l = l self.__l = l
self.__h = h self.__h = h
self.__couleur = couleur
def change_couleur(self,c):
self.__couleur = c
def __str__(self): def __str__(self):
return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}" return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}"
...@@ -46,7 +50,11 @@ class Ellipse(Forme): ...@@ -46,7 +50,11 @@ class Ellipse(Forme):
self._item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur) self._item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur)
self.__rx = rx self.__rx = rx
self.__ry = ry self.__ry = ry
self.__couleur = couleur
def change_couleur(self,c):
self.__couleur = c
def __str__(self): def __str__(self):
return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}" return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}"
......
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()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment