Vidéo
Objectif:
Utilisation de tkinter pour animer des objets dans un canevas.La vidéo vous indique l’objectif du programme:
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:])] |
- 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)
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))
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)) |