Un programme fonctionnel Python contient les blocs suivants dans l’ordre :
Remarques
Il est important de respecter l’indentation dans les boucles et dans la définition des fonctions locales.
Le nom des variables doit être explicite.
L’utilisateur doit être guidé de façon précise.
# 1101 programme fonctionnel.py
# ----------Importation des modules-----#
from tkinter import *
from math import *
import time
#--------Définition des fonctions----------#
def creer_fenetre(fenetre,taille,titre):
#construit la fenêtre
fenetre.geometry(taille)
fenetre.title(titre)
#fenetre.iconbitmap(icone)
return fenetre
def nettoie_canevas(donnees):
#nettoie le canevas
donnees[1].delete(ALL)
def dessine_canevas(donnees,a):
#dessine dans le canevas
nettoie_canevas(donnees)
ft="arial 40 bold"
f,c,l,h=donnees[0],donnees[1],donnees[2],donnees[3]
liste1=[15,15,30,50,l-50,h/2-80,l-10,20,35,h-30,35,h-50,l-70,h/2-30]
liste=[10,10,10,h/2,l-10,h-40,l-10,10,l-30,10,l-30,h-45,50,h/2,20,10]
if a==1:
c.create_rectangle(10,10,l-10,h-10,fill="khaki")
c.create_polygon(liste,fill="red",outline="gold",smooth=1)
t_menu=c.create_text(l/2,3*h/4,text="MENU",fill="red",tag="ZERO",font=ft)
c.tag_bind("ZERO", "<Button-1>",lambda utile:affiche_exemple(donnees))
if a==2:
c.create_rectangle(10,10,l-10,h-10,fill="pale green")
c.create_polygon(liste1,fill="blue",outline="gold",smooth=1)
t_menu=c.create_text(l/2,3*h/4,text="MENU",fill="red",tag="ZERO",font=ft)
c.tag_bind("ZERO", "<Button-1>",lambda inutile:affiche_exemple(donnees))
def quitter(donnees):
#fermeture de la fenêtre
donnees[0].destroy()
def affiche_exemple(donnes):
#Exemple de menu où il suffit de cliquer sur le texte
#donnees=[fenetre,can,largeur,hauteur]
f,c,l,h=donnees[0],donnees[1],donnees[2],donnees[3]
nettoie_canevas(donnees)
cl,ft,ta,tn="yellow","arial 40 bold","Affiche dessin 1!","Affiche dessin 2!"
me="MENU"
t_nettoie=c.create_text(l/2,2*h/4,text=tn,fill=cl,tag='DEUX' ,font=ft)
t_dessin=c.create_text(l/2,h/4,text=ta,fill="yellow",tag='UN' ,font=ft)
t_quitter=c.create_text(l/2,3*h/4,text="Quitter",fill="red",tag="TROIS",font=ft)
c.tag_bind("UN", "<Button-1>",lambda inutile:dessine_canevas(donnees,1))
c.tag_bind("DEUX", "<Button-1>",lambda inutile:dessine_canevas(donnees,2))
c.tag_bind("TROIS", "<Button-1>", lambda utile:quitter(donnees))
#----------Programme Principal-------------#
fenetre=Tk()
fenetre.title('Programme type')
largeur=int(fenetre.winfo_screenwidth()/4)
hauteur=int(fenetre.winfo_screenheight()/3)
taille=str(largeur)+"x"+str(hauteur)
creer_fenetre(fenetre,taille,"Programme fonctionnel")
can=Canvas(fenetre,width=largeur,height=hauteur,bg='light blue')
can.grid(row=0,column=0)
donnees=[fenetre,can,largeur,hauteur]
f,c,l,h=donnees[0],donnees[1],donnees[2],donnees[3]
ft="arial 40 bold"
t_menu=c.create_text(l/2,3*h/4,text="MENU",fill="red",tag="ZERO",font=ft)
c.tag_bind("ZERO", "<Button-1>",lambda utile :affiche_exemple(donnees))
fenetre.mainloop()
|
Déplacer
Pour déplacer un objet dans un canevas, il faut tenir compte du repère dans lequel évolue l’objet.
1202 deplacement balle.py
Voici l’exemple d’une balle de diamètre 30 qui se déplace du point \(\mathbf{(0,300)}\) au point \(\mathbf{(1000,300)}\).
La balle se déplace horizontalement ou verticalement et change de direction à chaque point.
Premier point : (0 ; 300 ), abscisse = 0 , ordonnée = 300. Deuxième point : (270 ;300), abscisse = 270 , ordonnée = 300. Troisième point : (270 ;300), abscisse =270 , ordonnée = 300 Quatrième point : ((530 ;170), abscisse =530 , ordonnée = 170 Cinquième point : (530 ;300), abscisse = 530 , ordonnée = 300. Sixième point : (1000 ; 300), abscisse = 0 , ordonnée = 300. |