from tkinter import *
from tkinter import messagebox as mb
class Quiz:
def __init__(self):
self.perguntas = [
"1. Alguma vez sentiu que devia reduzir a quantidade de álcool que bebe?",
"2. As pessoas criticam o seu consumo de álcool ou sugerem que deve beber menos?",
"3. Alguma vez se sentiu culpado(a) por causa de beber?",
"4. Alguma vez bebeu logo pela manhã para se sentir melhor ou para ultrapassar os efeitos da bebedeira (ressaca)?"
]
self.opcoes_resposta = [
["Sim", "Não"]
] * len(self.perguntas)
self.q_no = 0
self.total_score = 0
self.root = Tk()
self.root.geometry("800x450")
self.root.title("Teste CAGE")
self.display_title()
self.opt_selected = IntVar()
self.q_label = Label(self.root, text="", width=60, wraplength=700,
font=('ariel', 16, 'bold'), anchor='w', justify='left')
self.q_label.place(x=70, y=100)
self.opts = self.radio_buttons()
self.display_question()
self.display_options()
self.buttons()
self.root.mainloop()
def display_result(self):
if self.total_score == 0:
result = "O seu resultado não indica problemas evidentes com o álcool."
elif self.total_score == 1:
result = "Pode haver algum risco; esteja atento(a)."
else:
result = "Sinais de possível dependência do álcool. Considere procurar apoio profissional."
mb.showinfo("Resultado", result + "\n\nLembre-se de que este teste não substitui uma avaliação profissional.\n"
"Para um diagnóstico completo, consulte um médico ou psicólogo especializado.")
self.show_retry_or_exit()
def show_retry_or_exit(self):
self.clear_buttons()
retry_button = Button(self.root, text="Refazer", command=self.retry_quiz,
width=10, bg="green", fg="white", font=("ariel", 16, "bold"))
retry_button.place(x=300, y=380)
quit_button = Button(self.root, text="Sair", command=self.root.destroy,
width=10, bg="red", fg="white", font=("ariel", 16, "bold"))
quit_button.place(x=450, y=380)
def clear_buttons(self):
for widget in self.root.winfo_children():
if isinstance(widget, Button):
widget.destroy()
def retry_quiz(self):
self.q_no = 0
self.total_score = 0
self.opt_selected.set(0)
self.display_question()
self.display_options()
self.buttons()
def next_btn(self):
if self.opt_selected.get() == 0:
mb.showwarning("Aviso", "Por favor, selecione uma resposta antes de avançar.")
return
# "Sim" (valor 1) soma 1 ponto, "Não" (valor 2) soma 0
if self.opt_selected.get() == 1:
self.total_score += 1
self.q_no += 1
if self.q_no == len(self.perguntas):
self.display_result()
else:
self.display_question()
self.display_options()
def previous_btn(self):
if self.q_no > 0:
self.q_no -= 1
self.display_question()
self.display_options()
def buttons(self):
next_button = Button(self.root, text="Próxima", command=self.next_btn,
width=10, bg="blue", fg="white", font=("ariel", 16, "bold"))
next_button.place(x=350, y=380)
previous_button = Button(self.root, text="Anterior", command=self.previous_btn,
width=10, bg="orange", fg="white", font=("ariel", 16, "bold"))
previous_button.place(x=50, y=380)
quit_button = Button(self.root, text="Sair", command=self.root.destroy,
width=5, bg="black", fg="white", font=("ariel", 16, "bold"))
quit_button.place(x=700, y=50)
def display_options(self):
self.opt_selected.set(0)
for idx, option in enumerate(self.opcoes_resposta[self.q_no]):
self.opts[idx]['text'] = option
self.opts[idx]['value'] = idx + 1
def display_question(self):
question_text = self.perguntas[self.q_no]
self.q_label.config(text=question_text)
def display_title(self):
title = Label(self.root, text="Teste CAGE – Avaliação do Consumo de Álcool",
width=50, bg="green", fg="white", font=("ariel", 20, "bold"))
title.place(x=0, y=2)
def radio_buttons(self):
q_list = []
y_pos = 180
for i in range(2):
radio_btn = Radiobutton(self.root, text="", variable=self.opt_selected,
value=i + 1, font=("ariel", 14))
radio_btn.place(x=100, y=y_pos)
q_list.append(radio_btn)
y_pos += 40
return q_list
quiz = Quiz()