#!/opt/Python-3.4.4/bin/python3.4 # -*- coding:Utf-8 -*- ## Programme avec un canevas dans une fenêtre ## ## Dans ce canevas: deux cercles de taille et couleurs différentes ## ## Chaque cercle représente un astre ## ## Des boutons doivent permettre de les déplacer dans toutes les directions ## ## Affichage permanent dans des étiquettes : ## ## Distance séparant les deux astres ## ## Force s'exerçant entre eux ## ## Masse de chaque astre ## ## Echelle des distances ## ## Loi de la gravitation 6.67 * 10 e-11 * (m*m1)/d^2 ## from Tkinter import * from math import sqrt ## Initialisation variables et definition fonctions ## def cercle_rouge(coul ='red'): ## Astre rouge ## " tracé d'un astre rouge " global x_cercle_rouge, y_cercle_rouge can1.create_oval(x_cercle_rouge, y_cercle_rouge, x_cercle_rouge+rayon_rouge, y_cercle_rouge+rayon_rouge, outline= coul) def cercle_vert( coul ='green'): ## Astre vert ## " tracé d'un astre vert " global x_cercle_vert, y_cercle_vert, rayon_vert can1.create_oval(x_cercle_vert, y_cercle_vert, x_cercle_vert+rayon_vert, y_cercle_vert+rayon_vert, outline= coul) ## Déplacements astre rouge ## def avance_rouge(gd, hb): global x_cercle_rouge, y_cercle_rouge x_cercle_rouge, y_cercle_rouge = x_cercle_rouge + gd, y_cercle_rouge + hb cercle_rouge() def droit_Rouge(): " déplacement vers la droite " avance_rouge ( 10, 0) def gauche_Rouge(): " déplacement vers la gauche " avance_rouge(-10, 0) def haut_Rouge(): " déplacemnent vers le haut " avance_rouge( 0, -10 ) def bas_Rouge(): " déplacement vers le bas " avance_rouge( 0 , 10) ## Déplacements astre vert ## def avance_vert(gd, hb): global x_cercle_vert, y_cercle_vert x_cercle_vert, y_cercle_vert = x_cercle_vert + gd, y_cercle_vert + hb cercle_vert() def droit_Vert(): " déplacement vers la droite " avance_vert( 10, 0) def gauche_Vert(): " déplacement vers la gauche " avance_vert ( -10, 0) def haut_Vert(): " déplacemnent vers le haut " avance_vert( 0, -10) def bas_Vert(): " déplacement vers le bas " avance_vert( 0, 10) ## Distance entre les deux astres ## def distance_astres( x_cercle_vert, x_cercle_rouge, y_cercle_vert, y_cercle_rouge) : d = sqrt((x_cercle_vert - x_cercle_rouge )**2 + (y_cercle_vert - y_cercle_rouge )**2) return d ## Force entre les deux astres ## def force_astres(m1_astre_rouge, m2_astre_vert, d ): force = m1_astre_rouge * m2_astre_vert*6.67e-11/d**2 return force ########################################## Corps du programme principal ########################################## ## Variables suivantes utilisées de manière globale ## x_cercle_rouge, y_cercle_rouge = 10 , 10 x_cercle_vert, y_cercle_vert = 40 , 40 rayon_vert = 10 rayon_rouge = 10 d = 10 gd = 10 hb = 10 ## Masse des deux astres ## m1_astre_rouge = 6e29 m2_astre_vert = 6e29 ## Création du widget principal fenêtre ## fen1= Tk() fen1.title("Exercice avec deux astres en déplacement ") ## Création canevas ## can1 = Canvas(fen1, width=1000, height= 1000, bg='grey') can1.grid( ) ## Création widgets esclaves ## entr1 = Label(fen1) ## Etiquette indiquant la Distance séparant les deux astres entr2 = Label(fen1) ## Etiquette indiquant la Force entre eux entr3 = Label(fen1) ## Etiquette indiquant la Masse choisie pour l'astre rouge entr4 = Label(fen1) ## Etiquette indiquant la Masse choisie pour l'astre vert entr5 = Label(fen1) ## Etiquette indiquant l'Echelle des distances entr1.grid( row = 1 , column = 2 ) entr1.configure(text= " Distance de " + str(distance_astres(x_cercle_vert, x_cercle_rouge, y_cercle_vert, y_cercle_rouge)) + " kms") entr2.grid( row = 2 , column = 2 ) entr2.configure(text = " Force " + str(force_astres(m1_astre_rouge, m2_astre_vert, d)) + " Newtons") entr3.grid( row = 3 , column = 2 ) entr3.configure(text= "Masse de " + str(m1_astre_rouge) + " kgs") entr4.grid( row = 4 , column = 2 ) entr4.configure(text= "Masse de " + str(m2_astre_vert) + " kgs") entr5.grid( row = 5 , column = 2 ) Label(fen1, text= 'Cercle vert ' ).grid( row = 7, column = 4) Label(fen1, text= 'Cercle rouge ').grid( row = 7, column = 2) Button(fen1, text= 'Droite ', command = droit_Rouge).grid( row = 9, column = 2) Button(fen1, text= 'Gauche ', command = gauche_Rouge).grid( row = 10, column = 2) Button(fen1, text= 'Haut', command = haut_Rouge).grid( row = 11, column = 2) Button(fen1, text= 'Bas ', command = bas_Rouge).grid( row = 12, column = 2) Button(fen1, text= 'Droit ', command = droit_Vert).grid( row = 9, column = 4) Button(fen1, text= 'Gauche ', command = gauche_Vert).grid( row = 10, column = 4) Button(fen1, text= 'Haut', command = haut_Vert).grid( row = 11, column = 4) Button(fen1, text= 'Bas', command = bas_Vert).grid( row = 12, column = 4) Label(fen1, text = "Distance entre les astres").grid(row=1, column=1) force = Label( fen1, text= "Force entre eux ") force.grid( row = 2, column = 1) masse_astre_rouge = Label( fen1, text= "Astre rouge") masse_astre_rouge.grid( row = 3, column = 1) masse_astre_vert = Label( fen1, text= "Astre vert ") masse_astre_vert.grid( row = 4, column = 1) echelle_des_distances = Label ( fen1, text= "Echelle des distances ") echelle_des_distances.grid( row = 5, column = 1) fen1.mainloop()