Mundo em Python

Classificação Geral dos Avisos Meteorológicos

from tkinter import *

niveis_avisos = {
"Verde": {
"cor": "Verde",
"designacao": "Sem aviso",
"significado": "Situação meteorológica normal; não se preveem fenómenos perigosos.",
"impactos": "Sem riscos relevantes.",
"acoes": "Não é necessária qualquer ação especial.",
"cor_hex": "#00A300"
},
"Amarelo": {
"cor": "Amarelo",
"designacao": "Situação de atenção",
"significado": "Fenómenos meteorológicos frequentes, mas com alguma intensidade, podendo ter impacto local.",
"impactos": "Pequenas cheias, vento forte ocasional, ondulação moderada, trovoadas pontuais.",
"acoes": "Acompanhar as previsões meteorológicas e evitar exposição desnecessária a condições adversas.",
"cor_hex": "#FFD700" # amarelo
},
"Laranja": {
"cor": "Laranja",
"designacao": "Situação meteorológica de risco elevado",
"significado": "Fenómenos meteorológicos de intensidade elevada e ocorrência menos frequente. Risco moderado a elevado para pessoas e bens.",
"impactos": "Possibilidade de inundações rápidas, movimentos de massa, quedas de árvores, ondas grandes (5–7 m) e rajadas fortes (>90 km/h).",
"acoes": "Reduzir deslocações, proteger bens e seguir as instruções da Autoridade Nacional de Emergência e Proteção Civil.",
"cor_hex": "#FF8C00" # laranja
},
"Vermelho": {
"cor": "Vermelho",
"designacao": "Situação meteorológica extrema",
"significado": "Fenómenos meteorológicos muito severos e raros, com probabilidade muito elevada de impactos graves.",
"impactos": "Danos extensos, interrupções de serviços essenciais e riscos sérios para a segurança das pessoas.",
"acoes": "Evitar deslocações, procurar abrigo seguro e seguir as comunicações oficiais em tempo real.",
"cor_hex": "#CC0000" # vermelho
}
} # Configuração da janela principal
root = Tk()
root.geometry("900x600")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Classificação Geral dos Avisos Meteorológicos") # Título principal
titulo = Label(
root,
text="Classificação Geral dos Avisos Meteorológicos",
font=("Arial", 20, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.05, rely=0.05) # Subtítulo
texto_sub1 = Label(
root,
text="Escolha o nível de aviso:",
font=("Arial", 18, "bold"),
bg="#103030",
fg="#49e3e3"
)
texto_sub1.place(relx=0.1, rely=0.18) # Frame onde aparece o conteúdo do aviso
frame_info = Frame(root, bg="#1a1a1a", bd=3, relief="solid")
frame_info.place(relx=0.05, rely=0.32, relwidth=0.9, relheight=0.6) # Texto que mostra o conteúdo
texto_saida = Label(
frame_info,
text="",
font=("Arial", 14),
bg="#1a1a1a",
fg="white",
justify=LEFT,
anchor="nw",
padx=15,
pady=15,
wraplength=800
)
texto_saida.pack(fill=BOTH, expand=True) # Função chamada ao escolher um nível de aviso
def app(nivel):
info = niveis_avisos[nivel]
cor = info["cor_hex"]
texto = (
f"Cor: {info['cor']}\n\n"
f"Designação: {info['designacao']}\n\n"
f"Significado: {info['significado']}\n\n"
f"Impactos Esperados: {info['impactos']}\n\n"
f"Ações Recomendadas: {info['acoes']}"
)
texto_saida.config(text=texto, fg="white", bg=cor) # Menu dropdown
var = StringVar()
dropDownList = list(niveis_avisos.keys())
var.set(dropDownList[0])
dropdown = OptionMenu(root, var, *dropDownList, command=app)
dropdown.place(relx=0.5, rely=0.18, relwidth=0.4)
dropdown.config(
background='#09A3BA',
foreground="#FFFFFF",
font=("Arial", 18, "bold"),
borderwidth=0,
highlightthickness=0
)
dropdown["menu"].config(
background='#09A3BA',
foreground="#FFFFFF",
font=("Arial", 18, "bold")
) app(var.get()) root.mainloop()
0