Skip to content
Snippets Groups Projects
Commit 3ba2e282 authored by Demeillers Margaux's avatar Demeillers Margaux
Browse files

TD 4

parent 0215c970
No related branches found
No related tags found
No related merge requests found
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 16 13:36:20 2020
@author: marga
"""
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
boutonLancer = Button(racine, text='Tirage')
boutonLancer.pack(side=LEFT, padx=5, pady=5)
texteResultat = StringVar()
labelResultat = Label(racine, textvariable=texteResultat)
labelResultat.pack(side=LEFT, padx=5, pady=5)
boutonQuitter = Button(racine, text='Quitter')
boutonQuitter.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:15:32 2020
@author: marga
"""
import random
from tkinter import *
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('Tk')
racine.geometry('300x100+400+400')
# Les widgets de la scène
boutonRectangle = Button(racine, text='Rectangle')
boutonRectangle.pack(side=LEFT, padx=5, pady=5)
boutonEllipse = Button(racine, text='Ellipse')
boutonEllipse.pack(side=LEFT, padx=5, pady=5)
boutonCouleur = Button(racine, text='Couleur')
boutonCouleur.pack(side=LEFT, padx=5, pady=5)
boutonQuitter = Button(racine, text='Quitter')
boutonQuitter.pack(side=LEFT, padx=5, pady=5)
# association des commandes aux widgets
boutonQuitter.config(command=racine.destroy) # idem
racine.mainloop() # affichage de l'interface jusqu'à quit
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 16 14:37:21 2020
@author: marga
"""
from tkinter import *
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.__ListeForme=[]
self.couleur='purple'
# self.selection=[]
self.__forme_deplacee=None
def ajout_forme(self,x,y):
if self.formeActuelle=="Rectangle":
f=Rectangle(self, x-5, y-10, 10, 20, self.couleur)
self.__ListeForme.append(f)
else:
f=Ellipse(self,x-5, y-10, 20, 10, self.couleur)
self.__ListeForme.append(f)
# def ajout_rectangle(self,x,y):
# r=Rectangle(self,x-5, y-10, 10, 20, couleur='purple')
# def ajout_ellipse(self,x,y):
# e=Ellipse(self,x-5, y-10, 10, 20, couleur='gold')
def selection_rectangle(self):
self.formeActuelle="Rectangle"
def selection_ellipse(self):
self.formeActuelle="Ellipse"
def delete_forme(self,x,y):
for f in self.__ListeForme:
if f.contient_point(x,y)==True:
f.effacer()
self.__ListeForme.remove(f)
break
def selection_couleur(self):
ask_couleur = colorchooser.askcolor(title ="Choisir la couleur")
self.couleur=ask_couleur[1]
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
# def selection1 (self,x,y):
# for f in self.__ListeForme:
# if f.contient_point(x,y)==True:
# self.selection.append(f)
# self.__ListeForme.remove(f)
# break
# def change_coord(self,new_x,new_y):
# if len(self.selection)!=0:
# f=self.selection[0]
# self.selection.pop()
# f.x=new_x
# f.y=new_y
# self.__ListeForme.append(f)
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)
# Les widgets de la scène
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)
self.__canevas.bind('<Control-ButtonRelease-1>', self.erase_forme)
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)
# self.__canevas.bind('<Button-1>', self.clic_canevas)
# self.__canevas.bind('<B1-Motion>', 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)
# self.__canevas.bind('<Button-1>', self.selection_forme)
# self.__canevas.bind('<ButtonRelease-1>', self.new_coordonnees)
boutonRectangle.config(command=self.__canevas.selection_rectangle)
boutonEllipse.config(command=self.__canevas.selection_ellipse)
boutonCouleur.config(command=self.__canevas.selection_couleur)
def release_canevas(self,event):
self.__canevas.ajout_forme(event.x,event.y)
def erase_forme(self,event):
self.__canevas.delete_forme(event.x,event.y)
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
# def selection_forme(self,event):
# self.__canevas.selection1(event.x,event.y)
# def new_coordonnees(self,event):
# self.__canevas.change_coord(event.x,event.y)
# # association des commandes aux widgets
# boutonRectangle.config(command=self.__canevas.selection_rectangle)
# boutonEllipse.config(command=self.__canevas.selection_ellipse)
# #boutonRectangle.config(command=ajout_forme)
# boutonQuitter.config(command=barreOutils.destroy)
# boutonQuitter.config(command=canevas.destroy)
# barreOutils.mainloop() # affichage de l'interface jusqu'à quit
if __name__ == "__main__":
fen = FenPrincipale()
fen.mainloop()
# -*- coding: utf-8 -*-
"""
Created on Fri Oct 16 14:41:32 2020
@author: marga
"""
class Forme:
def __init__(self, canevas, x, y):
self.__canevas = canevas
self._item = None
self.x = x
self.y = y
def effacer(self):
self.__canevas.delete(self._item)
def deplacement(self, dx, dy):
self.__canevas.move(self._item, dx, dy)
self.x += dx
self.y += dy
class Rectangle(Forme):
def __init__(self, canevas, x, y, l, h, couleur):
Forme.__init__(self, canevas, x, y)
self._item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur)
self.__l = l
self.__h = h
def __str__(self):
return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}"
def get_dim(self):
return self.__l, self.__h
def set_dim(self, l, h):
self.__l = l
self.__h = h
def contient_point(self, x, y):
return self.x <= x <= self.x + self.__l and \
self.y <= y <= self.y + self.__h
def redimension_par_points(self, x0, y0, x1, y1):
self.x = min(x0, x1)
self.y = min(y0, y1)
self.__l = abs(x0 - x1)
self.__h = abs(y0 - y1)
class Ellipse(Forme):
def __init__(self, canevas, x, y, rx, ry, couleur):
Forme.__init__(self, canevas, x, y)
self._item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur)
self.__rx = rx
self.__ry = ry
def __str__(self):
return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}"
def get_dim(self):
return self.__rx, self.__ry
def set_dim(self, rx, ry):
self.__rx = rx
self.__ry = ry
def contient_point(self, x, y):
return ((x - self.x) / self.__rx) ** 2 + ((y - self.y) / self.__ry) ** 2 <= 1
def redimension_par_points(self, x0, y0, x1, y1):
self.x = (x0 + x1) // 2
self.y = (y0 + y1) // 2
self.__rx = abs(x0 - x1) / 2
self.__ry = abs(y0 - y1) / 2
class Forme:
def __init__(self, canevas, x, y):
self.__canevas = canevas
self._item = None
self.x = x
self.y = y
def effacer(self):
self.__canevas.delete(self._item)
def deplacement(self, dx, dy):
self.__canevas.move(self._item, dx, dy)
self.x += dx
self.y += dy
class Rectangle(Forme):
def __init__(self, canevas, x, y, l, h, couleur):
Forme.__init__(self, canevas, x, y)
self._item = canevas.create_rectangle(x, y, x+l, y+h, fill=couleur)
self.__l = l
self.__h = h
def __str__(self):
return f"Rectangle d'origine {self.x},{self.y} et de dimensions {self.__l}x{self.__h}"
def get_dim(self):
return self.__l, self.__h
def set_dim(self, l, h):
self.__l = l
self.__h = h
def contient_point(self, x, y):
return self.x <= x <= self.x + self.__l and \
self.y <= y <= self.y + self.__h
def redimension_par_points(self, x0, y0, x1, y1):
self.x = min(x0, x1)
self.y = min(y0, y1)
self.__l = abs(x0 - x1)
self.__h = abs(y0 - y1)
class Ellipse(Forme):
def __init__(self, canevas, x, y, rx, ry, couleur):
Forme.__init__(self, canevas, x, y)
self._item = canevas.create_oval(x-rx, y-ry, x+rx, y+ry, fill=couleur)
self.__rx = rx
self.__ry = ry
def __str__(self):
return f"Ellipse de centre {self.x},{self.y} et de rayons {self.__rx}x{self.__ry}"
def get_dim(self):
return self.__rx, self.__ry
def set_dim(self, rx, ry):
self.__rx = rx
self.__ry = ry
def contient_point(self, x, y):
return ((x - self.x) / self.__rx) ** 2 + ((y - self.y) / self.__ry) ** 2 <= 1
def redimension_par_points(self, x0, y0, x1, y1):
self.x = (x0 + x1) // 2
self.y = (y0 + y1) // 2
self.__rx = abs(x0 - x1) / 2
self.__ry = abs(y0 - y1) / 2
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment