Mundo em Python

Distritos de Portugal Continental

from tkinter import *
import webbrowser
import csv distritos_portugal = [
"Aveiro", "Beja", "Braga", "Bragança", "Castelo Branco", "Coimbra",
"Évora", "Faro", "Guarda", "Leiria", "Lisboa", "Portalegre",
"Porto", "Santarém", "Setúbal", "Viana do Castelo", "Vila Real", "Viseu"
] informacoes_distritos = {
"Aveiro": "População: ~713.000\nProvíncia: Beira Litoral\nRegião: Centro\nLatitude: 40.6405\nLongitude: -8.6538",
"Beja": "População: ~145.000\nProvíncia: Baixo Alentejo\nRegião: Alentejo\nLatitude: 38.0141\nLongitude: -7.8632",
"Braga": "População: ~850.000\nProvíncia: Minho (Cávado e Ave)\nRegião: Norte\nLatitude: 41.5503\nLongitude: -8.4201",
"Bragança": "População: ~120.000\nProvíncia: Trás-os-Montes\nRegião: Norte\nLatitude: 41.8060\nLongitude: -6.7567",
"Castelo Branco": "População: ~214.000\nProvíncia: Beira Baixa\nRegião: Centro\nLatitude: 39.8222\nLongitude: -7.4911",
"Coimbra": "População: ~430.000\nProvíncia: Beira Litoral\nRegião: Centro\nLatitude: 40.2110\nLongitude: -8.4292",
"Évora": "População: ~150.000\nProvíncia: Alentejo Central\nRegião: Alentejo\nLatitude: 38.5716\nLongitude: -7.9135",
"Faro": "População: ~470.000\nProvíncia: Algarve\nRegião: Algarve\nLatitude: 37.0194\nLongitude: -7.9304",
"Guarda": "População: ~150.000\nProvíncia: Beira Alta\nRegião: Centro\nLatitude: 40.5373\nLongitude: -7.2676",
"Leiria": "População: ~470.000\nProvíncia: Estremadura / Beira Litoral\nRegião: Centro\nLatitude: 39.7436\nLongitude: -8.8070",
"Lisboa": "População: ~2.280.000\nProvíncia: Estremadura\nRegião: Área Metropolitana de Lisboa\nLatitude: 38.7169\nLongitude: -9.1399",
"Portalegre": "População: ~104.000\nProvíncia: Alto Alentejo\nRegião: Alentejo\nLatitude: 39.2967\nLongitude: -7.4281",
"Porto": "População: ~1.750.000\nProvíncia: Douro Litoral\nRegião: Norte\nLatitude: 41.1496\nLongitude: -8.6109",
"Santarém": "População: ~430.000\nProvíncia: Ribatejo\nRegião: Centro\nLatitude: 39.2362\nLongitude: -8.6850",
"Setúbal": "População: ~880.000\nProvíncia: Estremadura / Alentejo Litoral\nRegião: Área Metropolitana de Lisboa\nLatitude: 38.5244\nLongitude: -8.8882",
"Viana do Castelo": "População: ~245.000\nProvíncia: Minho (Alto Minho)\nRegião: Norte\nLatitude: 41.6946\nLongitude: -8.8329",
"Vila Real": "População: ~185.000\nProvíncia: Trás-os-Montes e Alto Douro\nRegião: Norte\nLatitude: 41.3006\nLongitude: -7.7441",
"Viseu": "População: ~380.000\nProvíncia: Beira Alta\nRegião: Centro\nLatitude: 40.6610\nLongitude: -7.9097"
} # Cores por região
cores_regioes = {
"Norte": "#cce5ff",
"Centro": "#d4edda",
"Alentejo": "#fff3cd",
"Área Metropolitana de Lisboa": "#f8d7da",
"Algarve": "#e2e3e5"
} # Janela principal
root = Tk()
root.geometry("750x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Distritos de Portugal Continental") # Título
titulo = Label(text="Distritos de Portugal Continental",
font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.05, rely=0.05) # Subtítulo
texto_sub1 = Label(text="Escolhe um distrito:",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.1, rely=0.26) # Dropdown
var = StringVar()
var.set(distritos_portugal[0])
dropdown = OptionMenu(root, var, *distritos_portugal)
dropdown.place(relx=0.45, rely=0.25, relwidth=0.45)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 18, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 14)) # Frame do texto
frame_texto = Frame(root, bg="#cfe2f3")
frame_texto.place(relx=0.05, rely=0.6, relwidth=0.9, relheight=0.3) scrollbar = Scrollbar(frame_texto)
scrollbar.pack(side=RIGHT, fill=Y) resultado_texto = Text(frame_texto, wrap=WORD, font=("Arial", 14, "bold"),
bg="#cfe2f3", yscrollcommand=scrollbar.set)
resultado_texto.pack(side=LEFT, fill=BOTH, expand=True)
scrollbar.config(command=resultado_texto.yview)
resultado_texto.config(state=DISABLED) # Função para mostrar informações
def mostrar_informacoes():
distrito = var.get()
texto = informacoes_distritos.get(distrito, "Informação não disponível.") regiao = "Desconhecida"
for r in cores_regioes:
if f"Região: {r}" in texto:
regiao = r
break

cor_fundo = cores_regioes.get(regiao, "#cfe2f3") resultado_texto.config(state=NORMAL, bg=cor_fundo)
resultado_texto.delete("1.0", END)
resultado_texto.insert(END, f"{distrito}\n\n{texto}")
resultado_texto.config(state=DISABLED) # Botão Mostrar
btn_mostrar = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=mostrar_informacoes)
btn_mostrar.place(relx=0.1, rely=0.45, relwidth=0.25, relheight=0.1) # Função para abrir Google Maps
def abrir_google_maps():
distrito = var.get()
texto = informacoes_distritos.get(distrito, "")
# Extrai a latitude e longitude
lat = float(texto.split("Latitude:")[1].split("\n")[0].strip())
lon = float(texto.split("Longitude:")[1].split("\n")[0].strip())
url = f"https://www.google.com/maps?q={lat},{lon}"
webbrowser.open(url) # Botão Ver no Google Maps
btn_google_maps = Button(text="Ver no Google Maps", bd=2, bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=abrir_google_maps)
btn_google_maps.place(relx=0.55, rely=0.45, relwidth=0.35, relheight=0.1) # Função para gerar CSV
def gerar_csv():
with open("distritos_portugal.csv", mode='w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(["Distrito", "População", "Província", "Região", "Latitude", "Longitude"])
for distrito, info in informacoes_distritos.items():
populacao = info.split("População:")[1].split("\n")[0].strip()
provincia = info.split("Província:")[1].split("\n")[0].strip()
regiao = info.split("Região:")[1].split("\n")[0].strip()
latitude = info.split("Latitude:")[1].split("\n")[0].strip()
longitude = info.split("Longitude:")[1].split("\n")[0].strip()
writer.writerow([distrito, populacao, provincia, regiao, latitude, longitude]) btn_gerar_csv = Button(text="Gerar CSV", bd=2, bg='#107db2', fg='white',
font=('Verdana', 12, 'bold'), command=gerar_csv)
btn_gerar_csv.place(relx=0.05, rely=0.92, relwidth=0.4, relheight=0.07)
root.mainloop()
0