Python tkinter 示例

运行结果如下:

 

 

 

 

code

from tkinter import *
from tkinter import messagebox as mb
import json

class Quiz:
    def __init__(self):
        self.qno=0
        self.disp_title()
        self.disp_ques()
        self.opt_sel=IntVar()
        self.opts=self.radio_buttons()
        self.disp_opt()
        self.buttons()
        self.total_size=len(question)
        self.correct=0

    def disp_res(self):

        wrong_count = self.total_size - self.correct
        correct = f"Correct: {self.correct}"
        wrong = f"Wrong: {wrong_count}"

        score = int(self.correct / self.total_size * 100)
        result = f"Score: {score}%"

        mb.showinfo("Result", f"{result}\n{correct}\n{wrong}")


    def check_ans(self, qno):

        if self.opt_sel.get() == answer[qno]:
            return True


    def next_btn(self):

        if self.check_ans(self.qno):
            self.correct += 1

        self.qno += 1

        if self.qno==self.total_size:
            self.disp_res()
            ws.destroy()
        else:
            self.disp_ques()
            self.disp_opt()


    def buttons(self):

        next_button = Button(
            ws,
            text="Next",
            command=self.next_btn,
            width=10,
            bg="#F2780C",
            fg="white",
            font=("ariel",16,"bold")
        )

        next_button.place(x=350,y=380)

        quit_button = Button(
            ws,
            text="Quit",
            command=ws.destroy,
            width=5,
            bg="black",
            fg="white",
            font=("ariel",16," bold")
        )

        quit_button.place(x=700,y=50)


    def disp_opt(self):
        val=0
        self.opt_sel.set(0)

        for option in options[self.qno]:
            self.opts[val]['text']=option
            val+=1

    def disp_ques(self):

        qno = Label(
            ws,
            text=question[self.qno],
            width=60,
            font=( 'ariel' ,16, 'bold' ),
            anchor= 'w',
            wraplength=700,
            justify='center'
        )

        qno.place(x=70, y=100)


    def disp_title(self):

        title = Label(
            ws,
            text="PythonGuides QUIZ",
            width=50,
            bg="#F2A30F",
            fg="white",
            font=("ariel", 20, "bold")
        )

        title.place(x=0, y=2)


    def radio_buttons(self):

        q_list = []

        y_pos = 150

        while len(q_list) < 4:

            radio_btn = Radiobutton(
                ws,
                text=" ",
                variable=self.opt_sel,
                value = len(q_list)+1,
                font = ("ariel",14)
            )
            q_list.append(radio_btn)

            radio_btn.place(x = 100, y = y_pos)

            y_pos += 40

        return q_list

ws = Tk()

ws.geometry("800x450")

ws.title("PythonGuides Quiz")

with open('data.json') as f:
    data = json.load(f)

question = (data['question'])
options = (data['options'])
answer = (data[ 'answer'])

quiz = Quiz()

ws.mainloop()

 

data.json

{
  "question": [
    "Q1. What Indian city is the capital of two states?",
    "Q2. Which city is the capital of India?",
    "Q3. Smallest State of India?",
    "Q4. Where is Taj Mahal Located?"
  ],
  "answer": [
    1,
    2,
    3,
    2
  ],
  "options": [

    ["Chandigarh",
      "Kolkata",
      "Delhi",
      "Banglore"
    ],
    ["Jaipur",
      "Delhi",
      "Chennai",
      "Mumbai"
    ],
    ["Rajasthan",
      "Punjab",
      "Goa",
      "Bihar"
    ],
    ["Lucknow",
      "Agra",
      "Bhopal",
      "Delhi"
    ]
  ]
}

 

 

 

 

REF

https://acervolima.com/python-mcq-quiz-game-usando-tkinter/

https://pythonguides.com/python-tkinter-quiz/

 

posted @ 2023-01-17 16:26  emanlee  阅读(210)  评论(0编辑  收藏  举报