from tkinter import *
root = Tk()
root.geometry("720x500")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Pontuação Fórmula 1")
titulo = Label(
text="Pontuação Fórmula 1",
font=("Arial", 25, "bold"),
bg="#103030",
fg="#49e3e3"
)
titulo.place(relx=0.25, rely=0.03)
# GP (Corrida Principal)
pontos_gp = {
"1º Lugar": 25,
"2º Lugar": 18,
"3º Lugar": 15,
"4º Lugar": 12,
"5º Lugar": 10,
"6º Lugar": 8,
"7º Lugar": 6,
"8º Lugar": 4,
"9º Lugar": 2,
"10º Lugar": 1
}
# Sprint Race
pontos_sprint = {
"1º Lugar": 8,
"2º Lugar": 7,
"3º Lugar": 6,
"4º Lugar": 5,
"5º Lugar": 4,
"6º Lugar": 3,
"7º Lugar": 2,
"8º Lugar": 1
}
corrida_opcoes = ["GP (Corrida Principal)", "Sprint Race"]
var_tipo = StringVar()
var_tipo.set(corrida_opcoes[0])
label_tipo = Label(
text="Selecione o Tipo de Corrida:",
font=("Arial", 16, "bold"),
bg="#103030",
fg="#49e3e3"
)
label_tipo.place(relx=0.05, rely=0.15)
dropdown_tipo = OptionMenu(root, var_tipo, *corrida_opcoes)
dropdown_tipo.place(relx=0.05, rely=0.22, relwidth=0.40)
dropdown_tipo.config(background='#09A3BA', fg="white", font=("Arial", 16, "bold"))
dropdown_tipo["menu"].config(background='#09A3BA', fg="white", font=("Arial", 16, "bold"))
# Posicao
var_posicao = StringVar()
var_posicao.set("1º Lugar")
label_pos = Label(
text="Selecione a Posição:",
font=("Arial", 16, "bold"),
bg="#103030",
fg="#49e3e3"
)
label_pos.place(relx=0.55, rely=0.15)
dropdown_pos = OptionMenu(root, var_posicao, *pontos_gp.keys())
dropdown_pos.place(relx=0.55, rely=0.22, relwidth=0.40)
dropdown_pos.config(background='#09A3BA', fg="white", font=("Arial", 16, "bold"))
dropdown_pos["menu"].config(background='#09A3BA', fg="white", font=("Arial", 16, "bold"))
# Checkbox Volta Mais Rápida
volta_rapida = IntVar()
check_vr = Checkbutton(
text="Volta Mais Rápida (+1 ponto no GP, somente Top 10)",
variable=volta_rapida,
bg="#103030",
fg="#49e3e3",
selectcolor="#103030",
font=("Arial", 14, "bold")
)
check_vr.place(relx=0.05, rely=0.35)
def atualizar_opcoes_posicao(*args):
"""Muda lista de posições conforme GP ou Sprint."""
dropdown_pos["menu"].delete(0, "end")
tipo = var_tipo.get()
if tipo == "GP (Corrida Principal)":
for op in pontos_gp.keys():
dropdown_pos["menu"].add_command(label=op, command=lambda v=op: var_posicao.set(v))
var_posicao.set("1º Lugar")
else:
for op in pontos_sprint.keys():
dropdown_pos["menu"].add_command(label=op, command=lambda v=op: var_posicao.set(v))
var_posicao.set("1º Lugar")
var_tipo.trace("w", atualizar_opcoes_posicao)
def limpar():
resultado_texto.config(text="")
def calcular():
tipo = var_tipo.get()
pos = var_posicao.get()
vr = volta_rapida.get()
if tipo == "GP (Corrida Principal)":
pontos = pontos_gp.get(pos, 0)
if vr == 1 and pos in pontos_gp: # Apenas Top 10 ganha VR
pontos += 1
texto = f"GP: {pos} = {pontos} pontos"
else:
pontos = pontos_sprint.get(pos, 0)
texto = f"Sprint Race: {pos} = {pontos} pontos (sem volta rápida)"
resultado_texto.config(text=texto)
# Botões
but1 = Button(
text="Mostrar",
bd=2,
bg='#107db2',
fg='white',
font=('verdana', 12, 'bold'),
command=calcular
)
but1.place(relx=0.1, rely=0.50, relwidth=0.25, relheight=0.08)
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.50, relwidth=0.25, relheight=0.08)
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.50, relwidth=0.25, relheight=0.08)
resultado_texto = Label(
text="",
font=("Arial", 14, "bold"),
bg="#cfe2f3"
)
resultado_texto.place(relx=0.05, rely=0.62, relwidth=0.9, relheight=0.25)
root.mainloop()