ANIMATION
A.Objectif
Vidéo
Objectif:
Utilisation de tkinter pour animer des objets dans un canevas.La vidéo vous indique l’objectif du programme:
.
B.Affichage du code:
ovale rotation.py
from
tkinter import
*
from
math import
*
import
time, threading
from
random import*
from
fenetre import*
def
cherche_270(l_coul,l_angle):
""""cherche
si les deux couleurs sont identiques """
def
ajouter(fenetre,can,lab2,l_coul):
"""change
le score"""
def
construction(fenetre,can,l_item,l_angle,l_coul):
"""construit
la figure"""
def
animer(fenetre,can,bout,l_item,l_angle,l_coul,nb):
"""fait
tourner la figure"""
def jouer(fenetre,can,bout,l_coul,l_w):
"""lance le
jeu"""
def menu(fenetre,can,regle):
"""affiche le
menu"""
#----------------------programme
principal-------------------------------#
fenetre=Tk()
fenetre=creer_fenetre(fenetre,"440x750","Animation")
can=Canvas(fenetre,width=440,height=600)
can.grid(row=0,column=0,rowspan=6,columnspan=3 ,sticky='nesw',padx=5)
menu(fenetre,can,regle)
fenetre.mainloop()
fenetre.py
#fenetre.py
#module de construction de fenetres
from
tkinter import
*
def
creer_fenetre(fenetre,taille,titre):
"""modifie
une fenêtre"""
fenetre.title(titre)
fenetre.geometry(taille)
fenetre.resizable(height=False,width=False)
return fenetre
def
nettoie_fenetre(fenetre,can,liste_widgets):
can.delete(ALL)
for w in liste_widgets:w.destroy()
return fenetre,can
def
geoliste(g):
r=[i for i in range(0,len(g)) if not g[i].isdigit()]
return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])]
.
C.Description des fonctions de base
- Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.
Construction : Fabrique les polygones qui vont faire des rotations;
def
construction(fenetre,can,l_item,l_angle,l_coul):
"""construit
la figure"""
lc=[15,10,400,590]
lcf=[120,120,300,480]
for i in range(8):
arc1=can.create_arc(lc,start=i*45+22.5,extent=45,fill=l_coul[i],outline=l_coul[i])
l_item.append(arc1)
angle=(i*45+22.5)%360
l_angle.append(angle)
cercle=can.create_oval(lcf,fill='white')
l_item.append(cercle)
return l_angle,l_item
Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.
def
menu(fenetre,can,regle):
"""affiche
le menu"""
l_coul=["blue","yellow","red","green","blue","yellow","red","green","orange"]
l_item,l_angle,l_w=[],[],[]
l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)
lab=Label(fenetre,text=regle,bg='white',width=12,justify='center',font='verdana 10 bold')
l_w.append(lab)
lab.grid(row=2,column=1)
bout=Button(fenetre,text='JOUER',font='verdana 24 bold',height=2,bg="yellow")
bout.grid(row=6,column=1,sticky='nesw',padx=5)
l_w.append(bout)
bout.config(command=lambda:jouer(fenetre,can,bout,l_coul,l_w))
.
Animer : Execute la rotation.
def
animer(fenetre,can,bout,l_item,l_angle,l_coul,nb):
"""fait
tourner la figure"""
global
color,score
nb=nb+1
j=2
for i in range(8):
l_angle[i]=(l_angle[i]+2)%360
can.itemconfigure(l_item[i],start=l_angle[i])
if nb%8==0:
j=randrange(8)
color=l_coul[j]
nb=0
bout.config(bg=color,fg=l_coul[(j+2)%8])
fenetre.after(50,lambda:animer(fenetre,can,bout,l_item,l_angle,l_coul,nb))
Jouer : Fait débuter la rotation.
def
jouer(fenetre,can,bout,l_coul,l_w):
"""lance
le jeu"""
global color,l_angle,score
l_item,l_angle=[],[]
nb,score,color=0,0,"yellow"
fenetre,can=nettoie_fenetre(fenetre,can,l_w)
l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)
lab=Label(fenetre,text='score',bg='white',font='verdana 24 bold')
l_w.append(lab)
lab.grid(row=2,column=1)
lab2=Label(fenetre,text='0',font='verdana 24 bold')
lab2.grid(row=3,column=1)
l_w.append(lab2)
bout=Button(fenetre,text='',command=lambda:ajouter(fenetre,can,lab2,l_coul))
bout.config(text='Appuyer',font='vedana 20 bold')
bout.config(height=2)
bout.grid(row=6,column=1,sticky='nesw',padx=5)
l_w.append(bout)
animer(fenetre,can,bout,l_item,l_angle,l_coul,nb)
.
.
C.Le score et les angles
Note
Ces deux fonctions sont les plus difficiles à construire, à vous de déterminer leur objectif et leur efficacité;
.
chercher
def cherche_270(l_coul,l_angle):
""""cherche
si les deux couleurs sont identiques """
global color
trouve=False
angle=45
for i in range(8):
if l_angle[i]+angle/2>270-40 and l_angle[i]+angle/2<270+40:
if color==l_coul[i]:trouve=True
return trouve
ajouter
def
ajouter(fenetre,can,lab2,l_coul):
"""change
le score"""
global l_angle,color,score
plus=cherche_270(l_coul,l_angle)
if plus ==True:
score=score+1
else :
score=score
lab2.config(text=str(score))
ovale rotation.py |
---|
from tkinter import * from math import * import time, threading from random import* from fenetre import* def cherche_270(l_coul,l_angle): """"cherche si les deux couleurs sont identiques """ def ajouter(fenetre,can,lab2,l_coul): """change le score""" def construction(fenetre,can,l_item,l_angle,l_coul): """construit la figure""" def animer(fenetre,can,bout,l_item,l_angle,l_coul,nb): """fait tourner la figure""" def jouer(fenetre,can,bout,l_coul,l_w): """lance le jeu"""
def menu(fenetre,can,regle): """affiche le menu"""
#----------------------programme principal-------------------------------# fenetre=Tk() fenetre=creer_fenetre(fenetre,"440x750","Animation") can=Canvas(fenetre,width=440,height=600) can.grid(row=0,column=0,rowspan=6,columnspan=3 ,sticky='nesw',padx=5) menu(fenetre,can,regle) fenetre.mainloop() |
fenetre.py |
---|
#fenetre.py #module de construction de fenetres from tkinter import *
def creer_fenetre(fenetre,taille,titre): """modifie une fenêtre""" fenetre.title(titre) fenetre.geometry(taille) fenetre.resizable(height=False,width=False) return fenetre
def nettoie_fenetre(fenetre,can,liste_widgets): can.delete(ALL) for w in liste_widgets:w.destroy() return fenetre,can
def geoliste(g): r=[i for i in range(0,len(g)) if not g[i].isdigit()] return [int(g[0:r[0]]),int(g[r[0]+1:r[1]]),int(g[r[1]+1:r[2]]),int(g[r[2]+1:])] |
.
C.Description des fonctions de base
- Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.
Construction : Fabrique les polygones qui vont faire des rotations;
def
construction(fenetre,can,l_item,l_angle,l_coul):
"""construit
la figure"""
lc=[15,10,400,590]
lcf=[120,120,300,480]
for i in range(8):
arc1=can.create_arc(lc,start=i*45+22.5,extent=45,fill=l_coul[i],outline=l_coul[i])
l_item.append(arc1)
angle=(i*45+22.5)%360
l_angle.append(angle)
cercle=can.create_oval(lcf,fill='white')
l_item.append(cercle)
return l_angle,l_item
Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme.
def
menu(fenetre,can,regle):
"""affiche
le menu"""
l_coul=["blue","yellow","red","green","blue","yellow","red","green","orange"]
l_item,l_angle,l_w=[],[],[]
l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)
lab=Label(fenetre,text=regle,bg='white',width=12,justify='center',font='verdana 10 bold')
l_w.append(lab)
lab.grid(row=2,column=1)
bout=Button(fenetre,text='JOUER',font='verdana 24 bold',height=2,bg="yellow")
bout.grid(row=6,column=1,sticky='nesw',padx=5)
l_w.append(bout)
bout.config(command=lambda:jouer(fenetre,can,bout,l_coul,l_w))
.
Animer : Execute la rotation.
def
animer(fenetre,can,bout,l_item,l_angle,l_coul,nb):
"""fait
tourner la figure"""
global
color,score
nb=nb+1
j=2
for i in range(8):
l_angle[i]=(l_angle[i]+2)%360
can.itemconfigure(l_item[i],start=l_angle[i])
if nb%8==0:
j=randrange(8)
color=l_coul[j]
nb=0
bout.config(bg=color,fg=l_coul[(j+2)%8])
fenetre.after(50,lambda:animer(fenetre,can,bout,l_item,l_angle,l_coul,nb))
Jouer : Fait débuter la rotation.
def
jouer(fenetre,can,bout,l_coul,l_w):
"""lance
le jeu"""
global color,l_angle,score
l_item,l_angle=[],[]
nb,score,color=0,0,"yellow"
fenetre,can=nettoie_fenetre(fenetre,can,l_w)
l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul)
lab=Label(fenetre,text='score',bg='white',font='verdana 24 bold')
l_w.append(lab)
lab.grid(row=2,column=1)
lab2=Label(fenetre,text='0',font='verdana 24 bold')
lab2.grid(row=3,column=1)
l_w.append(lab2)
bout=Button(fenetre,text='',command=lambda:ajouter(fenetre,can,lab2,l_coul))
bout.config(text='Appuyer',font='vedana 20 bold')
bout.config(height=2)
bout.grid(row=6,column=1,sticky='nesw',padx=5)
l_w.append(bout)
animer(fenetre,can,bout,l_item,l_angle,l_coul,nb)
.
Construction : Fabrique les polygones qui vont faire des rotations; |
---|
def construction(fenetre,can,l_item,l_angle,l_coul): """construit la figure""" lc=[15,10,400,590] lcf=[120,120,300,480] for i in range(8): arc1=can.create_arc(lc,start=i*45+22.5,extent=45,fill=l_coul[i],outline=l_coul[i]) l_item.append(arc1) angle=(i*45+22.5)%360 l_angle.append(angle) cercle=can.create_oval(lcf,fill='white') l_item.append(cercle) return l_angle,l_item |
Le menu : Permet de débuter le jeu, contient tous les items nécessaires au programme. |
---|
def menu(fenetre,can,regle): """affiche le menu""" l_coul=["blue","yellow","red","green","blue","yellow","red","green","orange"] l_item,l_angle,l_w=[],[],[] l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul) lab=Label(fenetre,text=regle,bg='white',width=12,justify='center',font='verdana 10 bold') l_w.append(lab) lab.grid(row=2,column=1) bout=Button(fenetre,text='JOUER',font='verdana 24 bold',height=2,bg="yellow") bout.grid(row=6,column=1,sticky='nesw',padx=5) l_w.append(bout) bout.config(command=lambda:jouer(fenetre,can,bout,l_coul,l_w)) |
Animer : Execute la rotation. |
---|
def animer(fenetre,can,bout,l_item,l_angle,l_coul,nb): """fait tourner la figure""" global color,score nb=nb+1 j=2 for i in range(8): l_angle[i]=(l_angle[i]+2)%360 can.itemconfigure(l_item[i],start=l_angle[i]) if nb%8==0: j=randrange(8) color=l_coul[j] nb=0 bout.config(bg=color,fg=l_coul[(j+2)%8]) fenetre.after(50,lambda:animer(fenetre,can,bout,l_item,l_angle,l_coul,nb)) |
Jouer : Fait débuter la rotation. |
---|
def jouer(fenetre,can,bout,l_coul,l_w): """lance le jeu""" global color,l_angle,score l_item,l_angle=[],[] nb,score,color=0,0,"yellow" fenetre,can=nettoie_fenetre(fenetre,can,l_w) l_angle,l_item=construction(fenetre,can,l_item,l_angle,l_coul) lab=Label(fenetre,text='score',bg='white',font='verdana 24 bold') l_w.append(lab) lab.grid(row=2,column=1) lab2=Label(fenetre,text='0',font='verdana 24 bold') lab2.grid(row=3,column=1) l_w.append(lab2) bout=Button(fenetre,text='',command=lambda:ajouter(fenetre,can,lab2,l_coul)) bout.config(text='Appuyer',font='vedana 20 bold') bout.config(height=2) bout.grid(row=6,column=1,sticky='nesw',padx=5) l_w.append(bout) animer(fenetre,can,bout,l_item,l_angle,l_coul,nb) |
.
.
C.Le score et les angles
Note
Ces deux fonctions sont les plus difficiles à construire, à vous de déterminer leur objectif et leur efficacité;
.
chercher
def cherche_270(l_coul,l_angle):
""""cherche
si les deux couleurs sont identiques """
global color
trouve=False
angle=45
for i in range(8):
if l_angle[i]+angle/2>270-40 and l_angle[i]+angle/2<270+40:
if color==l_coul[i]:trouve=True
return trouve
ajouter
def
ajouter(fenetre,can,lab2,l_coul):
"""change
le score"""
global l_angle,color,score
plus=cherche_270(l_coul,l_angle)
if plus ==True:
score=score+1
else :
score=score
lab2.config(text=str(score))
Note
Ces deux fonctions sont les plus difficiles à construire, à vous de déterminer leur objectif et leur efficacité;
chercher |
---|
def cherche_270(l_coul,l_angle): """"cherche si les deux couleurs sont identiques """ global color trouve=False angle=45 for i in range(8): if l_angle[i]+angle/2>270-40 and l_angle[i]+angle/2<270+40: if color==l_coul[i]:trouve=True return trouve |
ajouter |
---|
def ajouter(fenetre,can,lab2,l_coul): """change le score""" global l_angle,color,score plus=cherche_270(l_coul,l_angle) if plus ==True: score=score+1 else : score=score lab2.config(text=str(score)) |