Mundo em Python

Teste de Personalidade Big Five

from tkinter import *
from tkinter import messagebox as mb class Quiz:
def __init__(self):
self.perguntas = [
"Q1. Gosto de experimentar coisas novas e explorar novas ideias?",
"Q2. Tenho interesse por arte, música ou literatura?",
"Q3. Sou curioso e gosto de aprender sobre temas variados?",
"Q4. Sou uma pessoa organizada e fiável?",
"Q5. Planeio as minhas tarefas com antecedência?",
"Q6. Cumpro prazos e compromissos sem dificuldades?",
"Q7. Considero-me extrovertido e sociável?",
"Q8. Gosto de estar rodeado de pessoas e fazer novas amizades?",
"Q9. Sinto-me energizado depois de interagir com os outros?",
"Q10. Sou uma pessoa amigável e cooperativa?",
"Q11. Gosto de ajudar os outros, mesmo sem receber nada em troca?",
"Q12. Sinto empatia pelas emoções das pessoas à minha volta?",
"Q13. Fico ansioso ou stressado com facilidade?",
"Q14. Preocupo-me demasiado com o que pode correr mal?",
"Q15. Tenho oscilações de humor frequentes?"
] self.opcoes_resposta = [
["1 - Discordo totalmente", "2 - Discordo", "3 - Neutro", "4 - Concordo", "5 - Concordo totalmente"]
] * len(self.perguntas) self.q_no = 0
self.respostas = [-1] * len(self.perguntas)
self.pontuacoes = {"O": 0, "C": 0, "E": 0, "A": 0, "N": 0}
self.opt_selected = IntVar(value=-1)
self.data_size = len(self.perguntas) self.display_title()
self.display_question()
self.opts = self.radio_buttons()
self.display_options()
self.buttons() def display_result(self):
self.calcular_pontuacao() resultado = "**Seu Perfil de Personalidade**:\n\n"
resultado += self.interpretar_traco("O", "Abertura à Experiência")
resultado += self.interpretar_traco("C", "Conscienciosidade")
resultado += self.interpretar_traco("E", "Extroversão")
resultado += self.interpretar_traco("A", "Amabilidade")
resultado += self.interpretar_traco("N", "Neuroticismo") mb.showinfo("Resultado", resultado)
root.destroy() def interpretar_traco(self, traco, nome):
pontuacao = self.pontuacoes[traco]
if pontuacao <= 9:
descricao = f"**{nome} (Baixo)**: Você tende a evitar esse traço na sua personalidade.\n"
elif pontuacao <= 16:
descricao = f"**{nome} (Médio)**: Você apresenta um equilíbrio nesse traço.\n"
else:
descricao = f"**{nome} (Alto)**: Esse traço é uma característica forte sua!\n"
return descricao + "\n"

def check_ans(self):
resposta = self.opt_selected.get()
if resposta == -1:
mb.showwarning("Aviso", "Por favor, selecione uma opção antes de continuar.")
return False
self.respostas[self.q_no] = resposta + 1
return True

def next_btn(self):
if not self.check_ans():
return
self.q_no += 1
if self.q_no == self.data_size:
self.display_result()
else:
self.update_question() def back_btn(self):
if self.q_no > 0:
self.q_no -= 1
self.update_question() def calcular_pontuacao(self):
for i, resposta in enumerate(self.respostas):
if i < 3:
self.pontuacoes["O"] += resposta
elif i < 6:
self.pontuacoes["C"] += resposta
elif i < 9:
self.pontuacoes["E"] += resposta
elif i < 12:
self.pontuacoes["A"] += resposta
else:
self.pontuacoes["N"] += resposta def update_question(self):
self.display_question()
self.display_options() def buttons(self):
self.back_button = Button(root, text="Voltar", command=self.back_btn,
width=10, bg="gray", fg="white", font=("ariel", 16, "bold"))
self.back_button.place(x=200, y=380) self.next_button = Button(root, text="Próxima", command=self.next_btn,
width=10, bg="blue", fg="white", font=("ariel", 16, "bold"))
self.next_button.place(x=350, y=380) quit_button = Button(root, text="Sair", command=root.destroy,
width=5, bg="black", fg="white", font=("ariel", 16, "bold"))
quit_button.place(x=700, y=50) def display_options(self):
val = 0
self.opt_selected.set(self.respostas[self.q_no])
for option in self.opcoes_resposta[self.q_no]:
self.opts[val]['text'] = option
self.opts[val]['value'] = val
val += 1

def display_question(self):
q_no = Label(root, text=self.perguntas[self.q_no], width=60,
font=('ariel', 16, 'bold'), anchor='w')
q_no.place(x=70, y=100) def display_title(self):
title = Label(root, text="Teste de Personalidade Big Five",
width=50, bg="green", fg="white", font=("ariel", 20, "bold"))
title.place(x=0, y=2) def radio_buttons(self):
q_list = []
y_pos = 150
for _ in range(5):
radio_btn = Radiobutton(root, text="", variable=self.opt_selected,
value=0, font=("ariel", 14))
q_list.append(radio_btn)
radio_btn.place(x=100, y=y_pos)
y_pos += 40
return q_list
root = Tk()
root.geometry("800x450")
root.title("Teste de Personalidade Big Five") quiz = Quiz()
root.mainloop()
0