目标:

编写一个图形化程序,此程序能从数据库检索到题目图形化展现,用户做出选择,然后统计最终得分。

 

1.首先用python创建sqlite试题数据库

# -*- coding: utf-8 -*-
# @Time : 2020/12/5 下午2:12
# @Author : Zhenghui Lyu
# @File : createdb.py
# @Software: PyCharm

import sqlite3

conn = sqlite3.connect('test2.db')  # 连接,如数据库不存在则创建

cursor = conn.cursor()  # 创建cursor

#cursor.execute('delete from exam')

cursor.execute(
    'CREATE TABLE [exam] ([question] VARCHAR(80) NULL,[ANSWER_A] VARCHAR(1) NULL,[ANSWER_B] VARCHAR(1) NULL,'
    '[ANSWER_C] VARCHAR(1) NULL,[ANSWER_D] VARCHAR(1) NULL,[RIGHT_ANSWER] VARCHAR(1) NULL)')

cursor.execute(
    'insert into exam (question,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) values ("夜郎自大中夜郎指的是现在哪个地方?","贵州",'
    '"云南","广西","福建","A")')

cursor.execute(
    'insert into exam (question,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) values ("历史上谁发明了麻药?","孙思邈",'
    '"华佗","张仲景","扁鹊","B")')

cursor.execute(
    'insert into exam (question,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) values ("京剧中的花旦指?","年轻男子",'
    '"年轻女子","年长男子","年长女子","B")')

cursor.execute(
    'insert into exam (question,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) values ("篮球比赛每队几人?","4",'
    '"5","6","7","B")')

cursor.execute(
    'insert into exam (question,ANSWER_A,ANSWER_B,ANSWER_C,ANSWER_D,RIGHT_ANSWER) values ('
    '"在天愿做比翼鸟,在地愿为连理枝讲的是谁的爱情故事?","焦仲卿和刘兰芝", '
    '"梁山伯和祝英台","崔莺莺和张生","杨贵妃和唐明皇","D")')

print(cursor.rowcount)

cursor.close()  # 关闭cursor

conn.commit()  # 提交事务

conn.close()  # 关闭conn

 

2.测试是否正确建立数据库,并读取其中内容

import sqlite3

conn = sqlite3.connect('test2.db')
cursor = conn.cursor()
cursor.execute('select *from exam')

values = cursor.fetchall()  # 获取全部结果,并存储到一个列表中
print(values)  # 打印结果,正常输出证明数据库正常、内容正确
cursor.close()
conn.close()

 

3.建立图形用户界面。

# -*- coding: utf-8 -*-
# @Time : 2020/12/5 15:10
# @Author : Zhenghui Lyu
# @FileName: dati.py
# @Email : lzhfootmark@163.com
# @Software: PyCharm
# @Blog :https://www.cnblogs.com/ZhenghuiLyu

import tkinter
from tkinter import *
from tkinter.messagebox import *
import sqlite3


def callNext():  # 用户答每题的得分情况
    global k
    global score
    useranswer = r.get()  # 用户选择
    print(r.get())
    if useranswer == values[k][5]:
        showinfo('恭喜', '你答对了')
        score += 10
    else:
        showinfo('遗憾', '你答错了')
    k += 1
    if k >= len(values):
        showinfo('提示', '题目做完了')
        return
    timu['text'] = values[k][0]
    radio1['text'] = values[k][1]
    radio2['text'] = values[k][2]
    radio3['text'] = values[k][3]
    radio4['text'] = values[k][4]
    r.set('E')


def callResult():  # 得到最终得分结果
    showinfo('你的得分:', str(score))


root = Tk()
root.title('python智力问答游戏')
root.geometry('500x200')

conn = sqlite3.connect('test2.db')
cursor = conn.cursor()
cursor.execute('select *from exam')

values = cursor.fetchall()  # 获取全部结果,并存储到一个列表中
# print(values)  # 打印结果,正常输出证明数据库正常、内容正确
cursor.close()
conn.close()

r = tkinter.StringVar()  # 创建StringVar对象即String类型的对象变量
r.set('E')  # 初始值,为没选中的状态
k = 0
score = 0
timu = tkinter.Label(root, text=values[k][0])
timu.pack()
f1 = Frame(root)  # frame组件, Tkinter 框架(Frame)控件在屏幕上显示一个矩形区域,多用来作为容器。
f1.pack()

radio1 = tkinter.Radiobutton(f1, variable=r, value='A', text=values[k][1])
radio1.pack()
radio2 = tkinter.Radiobutton(f1, variable=r, value='B', text=values[k][2])
radio2.pack()
radio3 = tkinter.Radiobutton(f1, variable=r, value='C', text=values[k][3])
radio3.pack()
radio4 = tkinter.Radiobutton(f1, variable=r, value='D', text=values[k][4])
radio4.pack()

f2 = Frame(root)
f2.pack()  # Python Tkinter 框架(Frame)控件在屏幕上显示一个矩形区域,多用来作为容器。
Button(f2, text='下一题', command=callNext).pack(side=LEFT)
Button(f2, text='结果', command=callResult).pack(side=LEFT)
root.mainloop()