Itinéraire avec Python (GUI)
Exemple :
Méthode : Préparation
Utilisation d'édupython 3 et des Modules/Librairies pyroutelib3, folium, webbrowser et tkinter (Rappel installation Bibliothèque/Module).
Interaction Utilisateur/Ordinateur à l'aide d'une Interface Graphique Utilisateur (GUI = Graphical User Interface).
Simulation : Code Python
1
#---------BIBLIOTHEQUES/MODULES---------2
from pyroutelib3 import Router
3
import folium
4
import webbrowser
5
from tkinter.messagebox import * # boîte de dialogue
6
from tkinter import *
7
import tkinter as tk
8
9
#----------FONCTIONS----------10
# Fonction carte11
def carto():
12
# Récupération des données entrées13
lieudepart = depart.get()
14
longitude1 = long1.get()
15
latitude1 = lat1.get()
16
lieuarrivee = arrivee.get()
17
longitude2 = long2.get()
18
latitude2 = lat2.get()
19
20
# lieux21
departi = [float(longitude1), float(latitude1)] #[46.548453, 3.286341]
22
arriveei = [float(longitude2), float(latitude2)] #[46.566067 , 3.332859]
23
24
#type de déplacement : cycle, foot, horse, tram, train, car ?25
router = Router("car")
26
27
# Création des points de départ et d'arrivée28
ptdepart = router.findNode(departi[0],departi[1])
29
ptarrivee = router.findNode(arriveei[0],arriveei[1])
30
31
#print(longitude1, latitude1)32
33
# calcul itinéraire : test de l'existence d'une route34
status, itineraire = router.doRoute(ptdepart, ptarrivee)
35
if status == 'success':
36
routeLatLons = list(map(router.nodeLatLon, itineraire)) # liste des points du parcours
37
# création de la carte38
carte= folium.Map(location=[(departi[0]+arriveei[0])/2,(departi[1]+arriveei[1])/2],zoom_start=14)
39
# ajout des points (noeuds) du parcours à la carte40
for indice,coord in enumerate(routeLatLons):
41
if indice%10==0:
42
coord=list(coord)
43
folium.Marker(coord).add_to(carte)
44
# ajout à la carte du tracé d'une ligne reliant les points/noeuds du parcours45
itineraire_coordonnees = list(map(router.nodeLatLon, itineraire)) # liste des points du parcours
46
folium.PolyLine(
47
itineraire_coordonnees,48
color="blue",
49
weight=2.5,
50
opacity=1
51
).add_to(carte)
52
# enregistrement et affichage de la carte53
nomcarte = lieudepart+'_'+lieuarrivee+'.html'
54
carte.save(nomcarte)
55
webbrowser.open(nomcarte)
56
57
#----------PROGRAMME PRINCIPAL----------58
59
# Création de la fenêtre principale (main window)60
Mafenetre = tk.Tk()
61
Mafenetre.title('Itinéraire')
62
# Taille de la fenêtre63
Mafenetre.geometry("460x250")
64
Mafenetre.configure(bg = 'orange')
65
tk.Label(Mafenetre, text = 'Itinéraire',
66
bg = 'orange', font=("Arial", 12, "bold")).grid(row=0, column=0)
67
68
# widget Nom du Lieu de Départ69
tk.Label(Mafenetre, text = 'Départ =', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=1)
70
depart = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
71
depart.grid(row=1, column=1)
72
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=1, column=2)
73
# widget Longitude74
tk.Label(Mafenetre, text = 'Longitude ', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=2,column=1)
75
long1 = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
76
long1.grid(row=3, column=1)
77
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=3, column=2)
78
# widget Latitude79
tk.Label(Mafenetre, text = 'Latitude ', bg = 'orange', fg='blue', font=("Arial", 11)).grid(row=2,column=3)
80
lat1 = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
81
lat1.grid(row=3, column=3)
82
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=3, column=4)
83
84
# widget Nom du Lieu d'Arrivée85
tk.Label(Mafenetre, text = 'Arrivée =', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=5)
86
arrivee = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
87
arrivee.grid(row=5, column=1)
88
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=5, column=2)
89
# widget Longitude90
tk.Label(Mafenetre, text = 'Longitude ', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=6, column=1)
91
long2 = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
92
long2.grid(row=7, column=1)
93
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=7, column=2)
94
# widget Latitude95
tk.Label(Mafenetre, text = 'Latitude ', bg = 'orange', fg='green', font=("Arial", 11)).grid(row=6,column=3)
96
lat2 = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
97
lat2.grid(row=7, column=3)
98
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=7, column=4)
99
100
101
# widget bouton Valider102
Valider = tk.Button(Mafenetre, text ='Valider', font=("Arial", 12, "bold"), command=carto)
103
Valider.grid(row=8, column=1, sticky=tk.W, pady=4)
104
105
# widget bouton Quitter106
Quitter = tk.Button(Mafenetre, text ='Quitter', font=("Arial", 12, "bold"), command = Mafenetre.destroy)
107
Quitter.grid(row=8, column=3, sticky=tk.W, pady=4)
108
109
# widget Obligatoire110
tk.Label(Mafenetre, text = '* Champs obligatoire', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=9, column=1)
111
112
Mafenetre.mainloop()
