from; tkinter; import * from; tkinter; import ttk import random import time import sqlite3
#Connect; to; the; database (create, if it doesnot exist) conn = sqlite3.connect("quiz_database.db") c = conn.cursor()
Create the table if it doesnot exist
c.execute(""'CREATE TABLE IF NOT EXISTS questions
(id INTEGER PRIMARY KEY AUTOINCREMENT,
question TEXT,
answer1 TEXT,
answer2 TEXT,
correct_answer INTEGER)""')
conn.commit()
Sample data (replace with your own questions)
sample_questions = [ ("Is the Earth flat?", "True", "False", 2), ("Do birds fly?", "True", "False", 1), ("Is water wet?", "True", "False", 1), ("Can humans breathe underwater?", "True", "False", 2), ]
c.executemany("INSERT OR IGNORE INTO questions (question, answer1, answer2, correct_answer) VALUES (?, ?, ?, ?)", sample_questions) conn.commit()
class QuizApp: def init(self, master): self.master = master master.title("True/False Quiz")
# Initialize variables
self.questions = []
self.current_question = 0
self.score = 0
self.start_time = 0
self.time_limit = 60 # Time limit in seconds
# Get questions from the database
self.load_questions()
# Create GUI elements
self.question_label = Label(master, text="", font=("Arial", 16))
self.question_label.pack(pady=20)
self.true_button = Button(master, text="True", command=lambda: self.check_answer(1), width=15)
self.true_button.pack(side=LEFT, padx=10)
self.false_button = Button(master, text="False", command=lambda: self.check_answer(2), width=15)
self.false_button.pack(side=RIGHT, padx=10)
self.feedback_label = Label(master, text="", font=("Arial", 12))
self.feedback_label.pack(pady=10)
self.timer_label = Label(master, text="Time Left: 60s", font=("Arial", 12))
self.timer_label.pack()
self.progress_bar = ttk.Progressbar(master, orient=HORIZONTAL, length=200, mode="determinate")
self.progress_bar.pack(pady=10)
self.start_quiz()
def load_questions(self):
c.execute("SELECT * FROM questions")
self.questions = c.fetchall()
random.shuffle(self.questions)
def start_quiz(self):
self.start_time = time.time()
self.display_question()
self.update_timer()
def display_question(self):
if self.current_question < len(self.questions):
question = self.questions[self.current_question]
self.question_label.config(text=question[1]) # Display the question
self.progress_bar["maximum"] = len(self.questions)
self.progress_bar["value"] = self.current_question + 1 # Update progress bar
def check_answer(self, selected_answer):
correct_answer = self.questions[self.current_question][4]
if selected_answer == correct_answer:
self.feedback_label.config(text="Correct!", fg="green")
self.score += 1
else:
self.feedback_label.config(text="Incorrect!", fg="red")
self.current_question += 1
if self.current_question < len(self.questions):
self.display_question()
else:
self.end_quiz()
def update_timer(self):
elapsed_time = time.time() - self.start_time
remaining_time = self.time_limit - elapsed_time
if remaining_time > 0:
self.timer_label.config(text=f"Time Left: {int(remaining_time)}s")
self.master.after(1000, self.update_timer)
else:
self.end_quiz()
def end_quiz(self):
self.true_button.config(state=DISABLED)
self.false_button.config(state=DISABLED)
self.feedback_label.config(text=f"Quiz Over! Your score: {self.score}/{len(self.questions)}")
Run the application
root = Tk() app = QuizApp(root) root.mainloop()
Close the database connection
conn.close()