import tkinter as tk
from tkinter import StringVar, OptionMenu
from geopy.distance import geodesic
# Dicionário com coordenadas de mais capitais e país correspondente
capitais = {
"Abu Dabi (Emirados Árabes Unidos)": (24.4667, 54.3667),
"Abuja (Nigéria)": (9.0575, 7.49508),
"Amesterdão (Países Baixos)": (52.3676, 4.9041),
"Ancara (Turquia)": (39.9208, 32.8541),
"Assunção (Paraguai)": (-25.2637, -57.5759),
"Atenas (Grécia)": (37.9838, 23.7275),
"Bagdade (Iraque)": (33.3152, 44.3661),
"Banguecoque (Tailândia)": (13.7563, 100.5018),
"Barcelona (Espanha)": (41.3784, 2.1925),
"Belgrado (Sérvia)": (44.7866, 20.4489),
"Berlim (Alemanha)": (52.5200, 13.4050),
"Bogotá (Colômbia)": (4.7110, -74.0721),
"Brasília (Brasil)": (-15.7801, -47.9292),
"Bruxelas (Bélgica)": (50.8503, 4.3517),
"Bucareste (Roménia)": (44.4268, 26.1025),
"Buenos Aires (Argentina)": (-34.6037, -58.3816),
"Cairo (Egito)": (30.0444, 31.2357),
"Canberra (Austrália)": (-35.2809, 149.1300),
"Caracas (Venezuela)": (10.4806, -66.9036),
"Cidade do Cabo (África do Sul)": (-33.9249, 18.4241),
"Cidade do México (México)": (19.4326, -99.1332),
"Copenhaga (Dinamarca)": (55.6761, 12.5683),
"Dacar (Senegal)": (14.6928, -17.4467),
"Damasco (Síria)": (33.5138, 36.2765),
"Daca (Bangladesh)": (23.8103, 90.4125),
"Dubai (Emirados Árabes Unidos)": (25.276987, 55.296249),
"Dublin (Irlanda)": (53.3331, -6.2489),
"Estocolmo (Suécia)": (59.3293, 18.0686),
"Genebra (Suíça)": (46.2044, 6.1432),
"Havana (Cuba)": (23.1136, -82.3666),
"Jacarta (Indonésia)": (-6.2088, 106.8456),
"Kuala Lumpur (Malásia)": (3.1390, 101.6869),
"Lagos (Nigéria)": (6.5244, 3.3792),
"Lima (Peru)": (-12.0464, -77.0428),
"Lisboa (Portugal)": (38.7169, -9.1395),
"Londres (Reino Unido)": (51.5074, -0.1278),
"Luanda (Angola)": (-8.839988, 13.289437),
"Madrid (Espanha)": (40.4168, -3.7038),
"Manila (Filipinas)": (14.5995, 120.9842),
"Maputo (Moçambique)": (-25.9692, 32.5732),
"Meca (Arábia Saudita)": (21.3891, 39.8579),
"Moscovo (Rússia)": (55.7558, 37.6176),
"Nairobi (Quénia)": (-1.2867, 36.8172),
"Nova Deli (Índia)": (28.6139, 77.2090),
"Nova Iorque (EUA)": (40.7128, -74.0060),
"Oslo (Noruega)": (59.9139, 10.7522),
"Otava (Canadá)": (45.4215, -75.6972),
"Paris (França)": (48.8566, 2.3522),
"Pequim (China)": (39.9042, 116.4074),
"Praia (Cabo Verde)": (14.9330, -23.5133),
"Quito (Equador)": (-0.1807, -78.4678),
"Reiquejavique (Islândia)": (64.1355, -21.8954),
"Rio de Janeiro (Brasil)": (-22.9068, -43.1729),
"Roma (Itália)": (41.9028, 12.4964),
"São Paulo (Brasil)": (-23.5505, -46.6333),
"Santiago (Chile)": (-33.4489, -70.6693),
"Seul (Coreia do Sul)": (37.5665, 126.9780),
"Sidney (Austrália)": (-33.8688, 151.2093),
"Singapura (Singapura)": (1.3521, 103.8198),
"Teerão (Irão)": (35.6892, 51.3890),
"Tóquio (Japão)": (35.6762, 139.6503),
"Toronto (Canadá)": (43.6511, -79.3832),
"Varsóvia (Polónia)": (52.2298, 21.0122),
"Vaticano (Vaticano)": (41.9029, 12.4534),
"Viena (Áustria)": (48.2082, 16.3738),
"Washington (EUA)": (38.9072, -77.0369),
"Zagreb (Croácia)": (45.8150, 15.9819)
}
# Função para calcular a distância
def calcular_distancia():
capital1 = var1.get()
capital2 = var2.get()
if capital1 in capitais and capital2 in capitais:
distancia = geodesic(capitais[capital1], capitais[capital2]).kilometers
resultado_label.config(text=f"Distância entre {capital1} e {capital2}: {distancia:.2f} km")
else:
resultado_label.config(text="Escolha capitais válidas.")
# Criando a interface gráfica
root = tk.Tk()
root.geometry("800x450")
root.title("Distância entre Capitais")
root.config(bg="#103030")
# Título
titulo = tk.Label(root, text="Distância entre Capitais", font=("Arial", 20, "bold"), bg="#103030", fg="#49e3e3")
titulo.pack(pady=10)
# Lista de capitais ordenadas alfabeticamente
opcoes = sorted(capitais.keys())
# Dropdowns
var1 = StringVar(value=opcoes[0])
var2 = StringVar(value=opcoes[1])
dropdown1 = OptionMenu(root, var1, *opcoes)
dropdown1.config(font=("Arial", 14))
dropdown1.pack(pady=5)
dropdown2 = OptionMenu(root, var2, *opcoes)
dropdown2.config(font=("Arial", 14))
dropdown2.pack(pady=5)
# Botão de calcular distância
botao = tk.Button(root, text="Calcular Distância", command=calcular_distancia, font=("Arial", 14), bg="#09A3BA",
fg="white")
botao.pack(pady=10)
# Rótulo do resultado
resultado_label = tk.Label(root, text="", font=("Arial", 16), bg="#103030", fg="white")
resultado_label.pack(pady=10)
# Iniciar a interface gráfica
root.mainloop()