Zone de confinement avec Python (GUI)

MéthodePréparation

Utilisation d'édupython 3 et des Modules/Librairies folium, webbrowser, tkinter (Rappel installation Bibliothèque/Module).

Interaction Utilisateur/Ordinateur à l'aide d'une Interface Graphique Utilisateur (GUI = Graphical User Interface).

SimulationCode Python

1
#---------BIBLIOTHEQUES/MODULES---------
2
import folium
3
import webbrowser
4
from tkinter.messagebox import * # boîte de dialogue
5
from tkinter import *
6
import tkinter as tk
7
8
#----------FONCTIONS----------
9
# Fonction carte
10
def carte():
11
    # Récupération des données entrées
12
    nomlieu = nom.get()
13
    longitude = long.get()
14
    latitude = lat.get()
15
    cercle1 = per1.get()
16
    cercle2 = per2.get()
17
    # lieu = [46.548312, 3.287667]
18
    lieu = [longitude, latitude]
19
    # Création d'une carte
20
    carte= folium.Map(location=lieu,zoom_start=12)
21
    # Ajout marqueur avec légende, couleur
22
    folium.Marker(
23
        location=lieu,
24
        popup=nomlieu,
25
        icon=folium.Icon(color='green')
26
        ).add_to(carte)
27
    # Cercle de confinement en mètres (radius = 1000 pour 1 km)
28
    folium.Circle(lieu,radius = cercle1, fill=True, color='red' ).add_to(carte)
29
    folium.Circle(lieu,radius = cercle2, fill=True, color='orange' ).add_to(carte)
30
    # enregistrement et affichage de la carte
31
    nomcarte = nomlieu+'_'+cercle1+'_'+cercle2+'.html'
32
    carte.save(nomcarte)
33
    webbrowser.open(nomcarte)
34
35
#----------PROGRAMME PRINCIPAL----------
36
37
# Création de la fenêtre principale (main window)
38
Mafenetre = tk.Tk()
39
Mafenetre.title('Périmètres')
40
# Taille de la fenêtre
41
Mafenetre.geometry("460x220")
42
Mafenetre.configure(bg = 'orange')
43
tk.Label(Mafenetre, text = 'Périmètre(s) d'+"'"+'influence ',
44
bg = 'orange', font=("Arial", 12, "bold")).grid(row=0, column=1)
45
46
# widget Nom du Lieu
47
tk.Label(Mafenetre, text = 'Nom du Lieu ',
48
bg = 'orange', font=("Arial", 11)).grid(row=1)
49
nom = tk.Entry(Mafenetre, bg ='bisque', fg='blue', font=("Arial", 11))
50
nom.grid(row=1, column=1)
51
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=1, column=2)
52
# widget Longitude
53
tk.Label(Mafenetre, text = 'Longitude ',
54
bg = 'orange', font=("Arial", 11)).grid(row=2)
55
long = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
56
long.grid(row=2, column=1)
57
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=2, column=2)
58
# widget Latitude
59
tk.Label(Mafenetre, text = 'Latitude ',
60
bg = 'orange', font=("Arial", 11)).grid(row=3)
61
lat = tk.Entry(Mafenetre, bg ='bisque', fg='green', font=("Arial", 11))
62
lat.grid(row=3, column=1)
63
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=3, column=2)
64
65
# widget Petit périmètre
66
tk.Label(Mafenetre, text = 'Petit Périmètre (en m) ',
67
bg = 'orange', font=("Arial", 11)).grid(row=4)
68
per1 = tk.Entry(Mafenetre, bg ='bisque', fg='red', font=("Arial", 11))
69
per1.grid(row=4, column=1)
70
tk.Label(Mafenetre, text = '*', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=4, column=2)
71
72
# widget Grand périmètre
73
tk.Label(Mafenetre, text = 'Grand Périmètre (en m) ',
74
bg = 'orange', font=("Arial", 11)).grid(row=5)
75
per2 = tk.Entry(Mafenetre, bg ='bisque', fg='red', font=("Arial", 11))
76
per2.grid(row=5, column=1)
77
tk.Label(Mafenetre, text = 'Optionnel', bg = 'orange', font=("Arial", 11)).grid(row=5, column=2)
78
79
# widget bouton Valider
80
Valider = tk.Button(Mafenetre, text ='Valider', font=("Arial", 12, "bold"), command=carte)
81
Valider.grid(row=6, column=1, sticky=tk.W, pady=4)
82
83
# widget bouton Quitter
84
Quitter = tk.Button(Mafenetre, text ='Quitter', font=("Arial", 12, "bold"), command = Mafenetre.destroy)
85
Quitter.grid(row=6, column=2, sticky=tk.W, pady=4)
86
87
# widget Obligatoire
88
tk.Label(Mafenetre, text = '* Champs obligatoire', bg = 'orange', fg = 'red', font=("Arial", 11)).grid(row=7, column=1)
89
90
Mafenetre.mainloop()