"""
L'affichage n'est pas à l'échelle
j'ai ajouté pour que les astres soient bien visible:
if rayon<0.1:rayon=3 # pour les planètes
else:rayon=10 # pour soleil et lune
Si quelqu'un peux conserver l'échelle avec zoom
merci de transmettre le code python
Des touches permettent de modifier la date et heure :
espace a A s S m M
touches de direction et mouse gauche et droite
"""
from tkinter import *
import math
import ephem
o=ephem.Observer()
o.date='2023/10/14 17:55:07' # une eclipse de soleil, visibilité à rechercher
o.lat='48.866667' # latitude pour Paris
o.lon='2.333333' # longitude pour Paris
o.elevation=0
def circle(x,y,diametre,astre):
global h2
rayon=diametre/2
rayon=rayon*0.000277778 # valeur réelle normalement
if rayon<0.1:rayon=2 # pour les planètes
else:rayon=10 # pour soleil et lune
x1=3*(x-rayon)
y1=h2-3*(y-rayon)
x2=3*(x+rayon)
y2=h2-3*(y+rayon)
cnvs.create_oval(x1,y1,x2,y2,fill=astre,outline=astre)
def affiche():
global o,w,h2
#fen.title(str(o.date)+' UTC
# de 1971 à 2999
#d=o.date.datetime()
#print(d.year,d.month,d.day,d.hour,d.minute,d.second)
fen.title(ephem.localtime(o.date).strftime("%d/%m/%Y %H:%M:%S"))
# recherche d'éclipse à o.date #################################
elevation=o.elevation
pressure=o.pressure
o.elevation=-6371000 # observateur au centre de la terre
o.pressure=0 # désactive la réfraction
sun=ephem.Sun(o)
moon=ephem.Moon(o)
separ=ephem.separation(moon,sun)/0.01745329252
sep=abs(separ)
if sep<1.59754941:print("Eclipse de soleil",o.date,sep)
sep=abs(separ-180)
if sep<0.9:print("Eclipse de lune",o.date,sep)
o.elevation=elevation
o.pressure=pressure
################################################################
sun=ephem.Sun(o)
moon=ephem.Moon(o)
mercury=ephem.Mercury(o)
venus=ephem.Venus(o)
mars=ephem.Mars(o)
jupiter=ephem.Jupiter(o)
saturn=ephem.Saturn(o)
cnvs.delete('all')
cnvs.create_line(0,h2,w,h2,fill="green") # horizon
circle(math.degrees(sun.az),math.degrees(sun.alt),sun.size,'red')
circle(math.degrees(moon.az),math.degrees(moon.alt),moon.size,'black')
circle(math.degrees(mercury.az),math.degrees(mercury.alt),mercury.size,'blue')
circle(math.degrees(venus.az),math.degrees(venus.alt),venus.size,'green')
circle(math.degrees(mars.az),math.degrees(mars.alt),mars.size,'magenta')
circle(math.degrees(jupiter.az),math.degrees(jupiter.alt),jupiter.size,'red')
circle(math.degrees(saturn.az),math.degrees(saturn.alt),saturn.size,'black')
drapeau=False # pour ne pas chevaucher les events key, b1 et b2
def key(e):
global drapeau,o
if drapeau:return
drapeau=True
if(e.keysym=='Left'):o.date-=ephem.minute
elif(e.keysym=='Right'):o.date+=ephem.minute
elif(e.keysym=='Up'):o.date+=ephem.hour
elif(e.keysym=='Down'):o.date-=ephem.hour
elif(e.keysym=='space'):o.date=ephem.now()
elif(e.keysym=='j+'):o.date+=24*ephem.hour
elif(e.keysym=='j-'):o.date-=24*ephem.hour
elif(e.keysym=='a'):o.date-=8760*ephem.hour
elif(e.keysym=='A'):o.date+=8760*ephem.hour
elif(e.keysym=='m'):o.date-=720*ephem.hour
elif(e.keysym=='M'):o.date+=720*ephem.hour
elif(e.keysym=='s'):o.date-=ephem.second
elif(e.keysym=='S'):o.date+=ephem.second
affiche()
drapeau=False
def b1(e):
e.keysym='j-'
key(e)
def b3(e):
e.keysym='j+'
key(e)
fen = Tk()
w=3*360 # azimut de 0 à 360
h=3*180 # altitude de -90 à 90
h2=h//2 # horizon
fen.bind("<Key>",key)
fen.bind('<Button-1>',b1)
fen.bind('<Button-3>',b3)
cnvs=Canvas(fen,width=w,height=h)
cnvs.pack()
affiche()
fen.mainloop()
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.