tkinterで4択クイズアプリを開発
下記サイトの写経です。
import csv import random import tkinter from tkinter import messagebox # https://daeudaeu.com/tkinter_quiz/ CSV_FILE = "quiz.csv" class Quiz(): def __init__(self, master): # master : クイズ画面を配置するウィジェット self.master = master self.quiz_list = [] self.now_quiz = None self.choice_value = tkinter.IntVar() self.getQuiz() self.createWidgets() self.showQuiz() def getQuiz(self): with open(CSV_FILE, encoding="utf-8") as f: csv_data = csv.reader(f) for quiz in csv_data: self.quiz_list.append(quiz) def createWidgets(self): self.frame = tkinter.Frame( self.master, width=400, height=200, ) self.frame.pack() self.button = tkinter.Button( self.master, text="OK", command=self.checkAnswer ) self.button.pack(pady=5) def showQuiz(self): num_quiz = random.randrange(len(self.quiz_list)) quiz = self.quiz_list[num_quiz] self.problem = tkinter.Label( self.frame, text=quiz[0] ) self.problem.grid( column=0, row=0, columnspan=4, pady=10 ) self.choices = [] for i in range(4): choice = tkinter.Radiobutton( self.frame, text=quiz[i+1], variable=self.choice_value, value=i ) choice.grid( row=1, column=i, padx=10, pady=10 ) self.choices.append(choice) self.quiz_list.remove(quiz) self.now_quiz = quiz def checkAnswer(self): if self.choice_value.get() == int(self.now_quiz[5]): messagebox.showinfo("結果", "正解です!!") else: messagebox.showinfo("結果", "不正解です…") self.deleteQuiz() if self.quiz_list: self.showQuiz() else: self.endAppli() def deleteQuiz(self): self.problem.destroy() for choice in self.choices: choice.destroy() def endAppli(self): self.problem = tkinter.Label( self.frame, text="クイズは全て出題済みです" ) self.problem.grid( column=0, row=0, padx=10, pady=10 ) self.button.config( command=self.master.destroy ) app = tkinter.Tk() quiz = Quiz(app) app.mainloop()