Mundo em Python

Simulador de Passagem de Nível

from tkinter import *

root = Tk()
root.geometry("700x300")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Simulador de Passagem de Nível") titulo = Label(
text="Simulador de Passagem de Nível",
font=("Arial", 28, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.08, rely=0.05) # Indicadores visuais
luz = Label(root, text="", font=("Arial", 20, "bold"), bg="#103030")
luz.place(relx=0.45, rely=0.25) cancela = Label(
root,
text="Cancelas levantadas",
font=("Arial", 24, "bold"),
bg="#103030",
fg="white"
)
cancela.place(relx=0.18, rely=0.35) resultado_texto = Label(
text="",
font=("Arial", 14, "bold"),
bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15)
# --- Funções ---
def limpar():
resultado_texto.config(text="")
luz.config(text="", bg="#103030")
cancela.config(text="Cancelas levantadas", fg="white")
def animar_passagem():
# Etapa 1 – trem aproxima-se
luz.config(text="Luz vermelha", fg="red")
cancela.config(text="Baixar as cancelas...", fg="#ff5050")
resultado_texto.config(text="Comboio aproxima-se...")
root.after(1500, etapa2)
def etapa2():
cancela.config(text="Cancelas abaixadas", fg="#ff0000")
resultado_texto.config(text="As cancelas estão fechadas. Aguarde...")
root.after(2500, etapa3)
def etapa3():
resultado_texto.config(text="O comboio está a passar...")
root.after(3000, etapa4)
def etapa4():
cancela.config(text="A levantar as cancelas...", fg="#00ff00")
resultado_texto.config(text="Comboio passou, abrindo passagem...")
root.after(2000, etapa5)
def etapa5():
luz.config(text="Luz verde", fg="lime")
cancela.config(text="Cancelas levantadas", fg="white")
resultado_texto.config(text="A passagem está livre. Pode atravessar.")
def app():
limpar()
animar_passagem()
# --- Botões ---
but1 = Button(
text="Iniciar",
bd=2,
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=app
)
but1.place(relx=0.1, rely=0.6, relwidth=0.25, relheight=0.1) but_limpar = Button(
text="Limpar",
bd=2,
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=limpar
)
but_limpar.place(relx=0.4, rely=0.6, relwidth=0.25, relheight=0.1) but_sair = Button(
text="Sair",
bd=2,
bg="#107db2",
fg="white",
font=("verdana", 12, "bold"),
command=root.destroy
)
but_sair.place(relx=0.7, rely=0.6, relwidth=0.25, relheight=0.1) root.mainloop()
0