Liga dos Campeões

from tkinter import *
from collections import defaultdict

champions_data = [
{"epoca": "1955–56", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Parc des Princes, França"},
{"epoca": "1956–57", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Santiago Bernabéu, Espanha"},
{"epoca": "1957–58", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "Heysel, Bélgica"},
{"epoca": "1958–59", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Neckarstadion, Alemanha Ocidental"},
{"epoca": "1959–60", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "Hampden Park, Escócia"},
{"epoca": "1960–61", "campeao": "Benfica", "pais_campeao": "Portugal", "local_final": "Wankdorf, Suíça"},
{"epoca": "1961–62", "campeao": "Benfica", "pais_campeao": "Portugal",
"local_final": "Olímpico de Amsterdã, Países Baixos"},
{"epoca": "1962–63", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Wembley, Inglaterra"},
{"epoca": "1963–64", "campeao": "Internazionale", "pais_campeao": "Itália",
"local_final": "Praterstadion, Áustria"},
{"epoca": "1964–65", "campeao": "Internazionale", "pais_campeao": "Itália",
"local_final": "Giuseppe Meazza, Itália"},
{"epoca": "1965–66", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "Heysel, Bélgica"},
{"epoca": "1966–67", "campeao": "Celtic", "pais_campeao": "Escócia", "local_final": "Nacional do Jamor, Portugal"},
{"epoca": "1967–68", "campeao": "Manchester United", "pais_campeao": "Inglaterra",
"local_final": "Wembley, Inglaterra"},
{"epoca": "1968–69", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Santiago Bernabéu, Espanha"},
{"epoca": "1969–70", "campeao": "Feyenoord", "pais_campeao": "Países Baixos",
"local_final": "Giuseppe Meazza, Itália"},
{"epoca": "1970–71", "campeao": "Ajax", "pais_campeao": "Países Baixos", "local_final": "Wembley, Inglaterra"},
{"epoca": "1971–72", "campeao": "Ajax", "pais_campeao": "Países Baixos", "local_final": "De Kuip, Países Baixos"},
{"epoca": "1972–73", "campeao": "Ajax", "pais_campeao": "Países Baixos",
"local_final": "Estrela Vermelha, Jugoslávia"},
{"epoca": "1973–74", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha Ocidental",
"local_final": "Heysel, Bélgica"},
{"epoca": "1974–75", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha Ocidental",
"local_final": "Parc des Princes, França"},
{"epoca": "1975–76", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha Ocidental",
"local_final": "Hampden Park, Escócia"},
{"epoca": "1976–77", "campeao": "Liverpool", "pais_campeao": "Inglaterra",
"local_final": "Olímpico de Roma, Itália"},
{"epoca": "1977–78", "campeao": "Liverpool", "pais_campeao": "Inglaterra", "local_final": "Wembley, Inglaterra"},
{"epoca": "1978–79", "campeao": "Nottingham Forest", "pais_campeao": "Inglaterra",
"local_final": "Olímpico de Munique, Alemanha Ocidental"},
{"epoca": "1979–80", "campeao": "Nottingham Forest", "pais_campeao": "Inglaterra",
"local_final": "Santiago Bernabéu, Espanha"},
{"epoca": "1980–81", "campeao": "Liverpool", "pais_campeao": "Inglaterra",
"local_final": "Parc des Princes, França"},
{"epoca": "1981–82", "campeao": "Aston Villa", "pais_campeao": "Inglaterra",
"local_final": "De Kuip, Países Baixos"},
{"epoca": "1982–83", "campeao": "Hamburgo", "pais_campeao": "Alemanha Ocidental",
"local_final": "Olympiastadion, Alemanha Ocidental"},
{"epoca": "1983–84", "campeao": "Liverpool", "pais_campeao": "Inglaterra",
"local_final": "Stade de France, França"},
{"epoca": "1984–85", "campeao": "Juventus", "pais_campeao": "Itália", "local_final": "Heysel, Bélgica"},
{"epoca": "1985–86", "campeao": "Steaua București", "pais_campeao": "Romênia",
"local_final": "Santiago Bernabéu, Espanha"},
{"epoca": "1986–87", "campeao": "Porto", "pais_campeao": "Portugal", "local_final": "Praterstadion, Áustria"},
{"epoca": "1987–88", "campeao": "PSV Eindhoven", "pais_campeao": "Países Baixos",
"local_final": "Estádio Neckar, Alemanha Ocidental"},
{"epoca": "1988–89", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Camp Nou, Espanha"},
{"epoca": "1989–90", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Praterstadion, Áustria"},
{"epoca": "1990–91", "campeao": "Estrela Vermelha", "pais_campeao": "Iugoslávia",
"local_final": "Stade de France, França"},
{"epoca": "1991–92", "campeao": "Barcelona", "pais_campeao": "Espanha", "local_final": "Wembley, Inglaterra"},
{"epoca": "1992–93", "campeao": "Marselha", "pais_campeao": "França", "local_final": "Olimpico, Itália"},
{"epoca": "1993–94", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Olympiastadion, Alemanha"},
{"epoca": "1994–95", "campeao": "Ajax", "pais_campeao": "Países Baixos",
"local_final": "Ernst-Happel-Stadion, Áustria"},
{"epoca": "1995–96", "campeao": "Juventus", "pais_campeao": "Itália", "local_final": "Stadion Olimpijski, Ucrânia"},
{"epoca": "1996–97", "campeao": "Borussia Dortmund", "pais_campeao": "Alemanha",
"local_final": "Olympiastadion, Alemanha"},
{"epoca": "1997–98", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Amsterdam ArenA, Países Baixos"},
{"epoca": "1998–99", "campeao": "Manchester United", "pais_campeao": "Inglaterra",
"local_final": "Camp Nou, Espanha"},
{"epoca": "1999–00", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "Stade de France, França"},
{"epoca": "2000–01", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha",
"local_final": "Stadio San Nicola, Itália"},
{"epoca": "2001–02", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "Hampden Park, Escócia"},
{"epoca": "2002–03", "campeao": "Milan", "pais_campeao": "Itália", "local_final": "Old Trafford, Inglaterra"},
{"epoca": "2003–04", "campeao": "Porto", "pais_campeao": "Portugal", "local_final": "Arena AufSchalke, Alemanha"},
{"epoca": "2004–05", "campeao": "Liverpool", "pais_campeao": "Inglaterra",
"local_final": "Estádio Olímpico de Istambul, Turquia"},
{"epoca": "2005–06", "campeao": "Barcelona", "pais_campeao": "Espanha", "local_final": "Stade de France, França"},
{"epoca": "2006–07", "campeao": "Milan", "pais_campeao": "Itália",
"local_final": "Estádio Olímpico de Atenas, Grécia"},
{"epoca": "2007–08", "campeao": "Manchester United", "pais_campeao": "Inglaterra",
"local_final": "Estádio Luzhniki, Rússia"},
{"epoca": "2008–09", "campeao": "Barcelona", "pais_campeao": "Espanha", "local_final": "Stade de France, França"},
{"epoca": "2009–10", "campeao": "Inter de Milão", "pais_campeao": "Itália",
"local_final": "Estádio Santiago Bernabéu, Espanha"},
{"epoca": "2010–11", "campeao": "Barcelona", "pais_campeao": "Espanha", "local_final": "Wembley, Inglaterra"},
{"epoca": "2011–12", "campeao": "Chelsea", "pais_campeao": "Inglaterra", "local_final": "Allianz Arena, Alemanha"},
{"epoca": "2012–13", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha",
"local_final": "Wembley, Inglaterra"},
{"epoca": "2013–14", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Estádio da Luz, Portugal"},
{"epoca": "2014–15", "campeao": "Barcelona", "pais_campeao": "Espanha",
"local_final": "Estádio Olímpico de Berlim, Alemanha"},
{"epoca": "2015–16", "campeao": "Real Madrid", "pais_campeao": "Espanha", "local_final": "San Siro, Itália"},
{"epoca": "2016–17", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Millennium Stadium, País de Gales"},
{"epoca": "2017–18", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "NSC Olimpiyskiy Stadium, Ucrânia"},
{"epoca": "2018–19", "campeao": "Liverpool", "pais_campeao": "Inglaterra",
"local_final": "Estádio Wanda Metropolitano, Espanha"},
{"epoca": "2019–20", "campeao": "Bayern de Munique", "pais_campeao": "Alemanha",
"local_final": "Estádio da Luz, Portugal"},
{"epoca": "2020–21", "campeao": "Chelsea", "pais_campeao": "Inglaterra",
"local_final": "Estádio do Dragão, Portugal"},
{"epoca": "2021–22", "campeao": "Real Madrid", "pais_campeao": "Espanha",
"local_final": "Estádio de Paris, França"},
{"epoca": "2022–23", "campeao": "Manchester City", "pais_campeao": "Inglaterra",
"local_final": "Estádio Olímpico Atatürk, Turquia"},
{"epoca": "2023–24", "campeao": "Real Madrid ", "pais_campeao": "Espanha",
"local_final": "Estádio Wembley, Inglaterra"},
{"epoca": "2024–25", "campeao": "Paris Saint-Germain", "pais_campeao": "França",
"local_final": "Estádio de San Mamés, Espanha"},
]

# Pre-calculate titles per club using defaultdict
titulos_por_clube = defaultdict(list)
for champion in champions_data:
# Ensure consistency by stripping whitespace if any
club_name = champion["campeao"].strip()
titulos_por_clube[club_name].append(champion["epoca"])

root = Tk()
root.geometry("700x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("Liga dos Campeões")

titulo = Label(text="Liga dos Campeões",
font=("Arial", 30, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.2, rely=0.05)

texto_sub1 = Label(text="Ano: ",
font=("Arial", 20, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.2, rely=0.3)

# Lista com as épocas para o dropdown
dropDownList = sorted([item["epoca"] for item in champions_data])
var = StringVar()
var.set(dropDownList[0])

dropdown = OptionMenu(root, var, *dropDownList)
dropdown.place(relx=0.38, rely=0.3, relwidth=0.4)
dropdown.config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 20, "bold"))
dropdown["menu"].config(background='#09A3BA', foreground="#FFFFFF", font=("Arial", 20, "bold"))


def limpar():
resultado_texto.config(state=NORMAL)
resultado_texto.delete("1.0", END)
resultado_texto.config(state=DISABLED)


def app():
epoca = var.get()
resultado_texto.config(state=NORMAL)
resultado_texto.delete("1.0", END)

# Buscar dados da temporada selecionada
dados = next((item for item in champions_data if item["epoca"] == epoca), None)
if dados is None or dados["campeao"].strip() == "A definir": # .strip() to handle potential whitespace
mensagem = f"Nenhuma final registrada para a época {epoca}."
mensagem1 = ""
else:
clube = dados["campeao"].strip() # .strip() to ensure consistent key for lookup
pais = dados["pais_campeao"]
mensagem = f"Na época {epoca}, o campeão foi {clube} ({pais})."

# Access the pre-calculated titles
titles_list = titulos_por_clube[clube]
if len(titles_list) > 1:
# Sort titles for consistent output
anos = ", ".join(sorted(titles_list))
mensagem1 = f"→ {clube} tem {len(titles_list)} títulos da Liga dos Campeões: {anos}."
else:
mensagem1 = f"→ Esse foi o único título da Liga dos Campeões conquistado pelo {clube}."

resultado_texto.insert(END, f"{mensagem}\n{mensagem1}")
resultado_texto.config(state=DISABLED)


but1 = Button(text="Mostrar", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.5, 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.5, 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.5, relwidth=0.25, relheight=0.1)

frame_resultado = Frame(root)
frame_resultado.place(relx=0.05, rely=0.65, relwidth=0.9, relheight=0.28)

scrollbar = Scrollbar(frame_resultado)
scrollbar.pack(side=RIGHT, fill=Y)

resultado_texto = Text(frame_resultado, wrap=WORD, font=("Arial", 12, "bold"), yscrollcommand=scrollbar.set)
resultado_texto.pack(fill=BOTH, expand=True)
resultado_texto.config(state=DISABLED, bg="#cfe2f3")

scrollbar.config(command=resultado_texto.yview)

root.mainloop()

Comentários

Mensagens populares deste blogue

Criar Cartões de Visita

12 signos egípcios

Calcular a percentagem de ocupação