Mundo em Python

PIB Atualizado por País


import requests
from tkinter import *
# Função para obter a lista de países da API REST Countries
def obter_lista_paises():
url = "https://restcountries.com/v3.1/all" # API que lista informações sobre todos os países
response = requests.get(url) if response.status_code == 200:
dados = response.json()
dicionario_paises = {}
for pais in dados:
nome_portugues = pais.get('translations', {}).get('por', {}).get('common')
codigo_iso = pais.get('cca3')
if nome_portugues and codigo_iso:
dicionario_paises[nome_portugues] = codigo_iso
return dicionario_paises
else:
print("Erro ao buscar a lista de países.")
return {}
# Função para obter o código do país com base no nome ou na sigla
def obter_codigo_pais(entrada, paises):
if len(entrada) == 3 and entrada.isalpha():
for codigo_iso in paises.values():
if entrada.upper() == codigo_iso:
return entrada.upper()
return paises.get(entrada)
# Função para obter o PIB do país a partir do código ISO
def obter_pib(codigo_pais):
url = f'http://api.worldbank.org/v2/country/{codigo_pais}/indicator/NY.GDP.MKTP.CD?format=json'
response = requests.get(url)
if response.status_code == 200:
dados = response.json()
if dados and len(dados) > 1:
for registro in dados[1]:
if registro['value'] is not None:
ano = registro['date']
pib = registro['value']
return ano, pib
return None, None


# Função principal para integração com a interface gráfica
def app():
try:
entrada = pais.get()
resultado_texto.config(text="Carregando...") # Obter lista de países (carregado apenas uma vez)
global paises
if not paises:
paises = obter_lista_paises() # Buscar o código do país
codigo_pais = obter_codigo_pais(entrada, paises)
if codigo_pais:
ano, pib = obter_pib(codigo_pais)
if pib:
resultado_texto.config(
text=f'O PIB de {entrada} (código {codigo_pais}) em {ano} foi de ${pib:,.2f}',
fg="green"
)
else:
resultado_texto.config(
text=f'Não foi possível obter o PIB para "{entrada}".',
fg="red"
)
else:
resultado_texto.config(
text=f'País ou sigla "{entrada}" não encontrado.',
fg="red"
)
except Exception as e:
resultado_texto.config(text=f"Erro: {str(e)}", fg="red")
# Função para limpar a entrada e resultado
def limpar():
pais_entrada.delete(0, END)
resultado_texto.config(text="", fg="black")
# Configuração da interface gráfica com Tkinter
root = Tk()
root.geometry("700x400")
root.resizable(0, 0)
root.config(bg="#103030")
root.title("PIB Atualizado por País") # Título
titulo = Label(text="PIB Atualizado por País",
font=("Arial", 28, "bold"), bg="#103030", fg="#49e3e3")
titulo.place(relx=0.17, rely=0.05) # Subtítulo
texto_sub1 = Label(text="Nome do país em português ou a sigla ISO Alpha-3",
font=("Arial", 18, "bold"), bg="#103030", fg="#49e3e3")
texto_sub1.place(relx=0.08, rely=0.32) # Entrada do país ou sigla
pais = StringVar()
pais_entrada = Entry(textvariable=pais,
font=("Arial", 12, "bold"),
bg="white", fg="blue", justify='center')
pais_entrada.place(relx=0.23, rely=0.42, relwidth=0.6)
pais_entrada.focus() # Botão Calcular
but1 = Button(text="Calcular", bd=2, bg='#107db2', fg='white',
font=('verdana', 12, 'bold'), command=app)
but1.place(relx=0.1, rely=0.65, relwidth=0.25, relheight=0.1) # Botão Limpar
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.65, relwidth=0.25, relheight=0.1) # Botão Sair
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.65, relwidth=0.25, relheight=0.1) # Resultado
resultado_texto = Label(text="",
font=("Arial", 12, "bold"), bg="#cfe2f3", wraplength=600, justify="center")
resultado_texto.place(relx=0.05, rely=0.8, relwidth=0.9, relheight=0.15) # Carregar lista de países apenas uma vez
paises = {} root.mainloop()
0