sqlite3和tkinter结合使用案例编程

sqlite3和tkinter结合使用案例编程,第1张

        下面是利用Python的sqlite3数据库和tkinter编写的简单问答程序,适合对数据库知识刚入门的小伙伴 :

import time
# 建立题目数据库
import sqlite3
# 问题列表,可增删
questions = [('哈雷彗星的平均周期为:','A:54年','B:56年','C:73年','D:83年','C'),
             ('“夜郎自大”中“夜郎”指的是现在那个地方?','A:贵州','B:云南','C:广西','D:福建','A'),
             ('在中国历史上是谁发明了火药?', 'A孙思邈', 'B华佗', 'C张仲景', 'D扁鹊','B'),
             ('京剧中花旦是指:', 'A年轻男子', 'B年轻女子', 'C年长男子' ,'D年长女子','B'),
             ('篮球比赛每队几人?', 'A 4人' ,'B 5人','C 6人', 'D 7人', 'B'),
             ('"在天愿作比翼鸟,在地愿为连理枝"讲述的是谁的爱情故事?', 'A 焦钟卿和刘兰芝' ,'B 梁山伯与祝英台', 'C 崔莺莺和张生', 'D 杨贵妃和唐明皇', 'D')]
con = sqlite3.connect("D:\\test.db") #建立连接对象
cur = con.cursor()  #建立游标对象
cur.execute("drop table question")  #删除原question中所有内容,因为原来就建立有,否则不能插入数据
cur.execute("create table question(question_tittle,answer_A,answer_B,answer_C,answer_D,rightAnswer)") #创建关系
cur.executemany("INSERT INTO question values(?,?,?,?,?,?)",questions) #导入数据库
question_date = cur.execute("select * from question").fetchall() #生成题目数据列表
con.commit() #上传数据


#题目随机打乱
import random
random.shuffle(question_date)


#题目问答程序
import tkinter as tk
from tkinter import messagebox as msg

def answer_question(event): #问问题函数
    global ans
    global scores
    user_answer = demo.get()
    if user_answer == question_date[ans][5]:
        msg.showinfo('Congradualation!','恭喜你答对了')
        scores += 10
        ans += 1
        if ans >= len(question_date):  # 判断题目是否做完
            time.sleep(1)               #延时一秒
            msg.showinfo('提示', '题目已做完。')
            button1.config(state='disabled')
            button1.bind('<1>', 'none')  # 设置“下一题”按钮不可用
        # 显示下一题
        if ans != len(question_date):
            showQuestion['text'] = question_date[ans][0]
            radio_A['text'] = question_date[ans][1]
            radio_B['text'] = question_date[ans][2]
            radio_C['text'] = question_date[ans][3]
            radio_D['text'] = question_date[ans][4]
            demo.set('E')
    elif user_answer == "E":
        msg.showinfo("Warning",'您还未作答')
    else:
        msg.showinfo('Sorry',"很遗憾你答错了\n"+"正确答案为"+question_date[ans][5])
        ans += 1
        if ans >= len(question_date):   #判断题目是否做完
            msg.showinfo('提示','题目已做完,请查看结果。')
            button1.config(state = 'disabled')
            button1.bind('<1>','none')  #设置“下一题”按钮不可用
        #显示下一题
        if ans != len(question_date):
            showQuestion['text'] = question_date[ans][0]
            radio_A['text'] = question_date[ans][1]
            radio_B['text'] = question_date[ans][2]
            radio_C['text'] = question_date[ans][3]
            radio_D['text'] = question_date[ans][4]
            demo.set('E')

def showResult(event):  #得分显示函数
    if ans < len(question_date):
        msg.showinfo('提示','题目还没做完!')
    else:
        print("你的得分为:",str(scores),'满分为'+str(len(question_date) * 10) + '分')
        exit(1)
# def showRightAnswer(event):
#     msg.showinfo("正确答案",question_date[ans][5])

#创建主显示界面
root = tk.Tk()
root.title('Python智力问答游戏')
root.geometry('500x200+400+200')

ans,scores = 0,0
demo = tk.StringVar()   #设置变量以便后面获取信息
demo.set('E')           #设置初始值,否则会错误
showQuestion = tk.Label(root,text = question_date[ans][0])
showQuestion.pack()
showFrame = tk.Frame(root)
showFrame.pack()
radio_A = tk.Radiobutton(showFrame,text = question_date[ans][1],variable = demo,value = 'A')
radio_A.pack()
radio_B = tk.Radiobutton(showFrame,text = question_date[ans][2],variable = demo,value = 'B')
radio_B.pack()
radio_C = tk.Radiobutton(showFrame,text = question_date[ans][3],variable = demo,value = 'C')
radio_C.pack()
radio_D = tk.Radiobutton(showFrame,text = question_date[ans][4],variable = demo,value = 'D')
radio_D.pack()
frame2 = tk.Frame(root)
frame2.pack()
button1 = tk.Button(frame2,text = "下一题")
button1.pack(side = 'left')
button1.bind("",answer_question)
button2 = tk.Button(frame2,text = "结果")
button2.pack(side = 'left')
button2.bind("",showResult)


root.mainloop()

欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/langs/714689.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-24
下一篇 2022-04-24

发表评论

登录后才能评论

评论列表(0条)

保存