sqlite3和tkinter结合使用案例编程

        下面是利用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("<Button-1>",answer_question)
button2 = tk.Button(frame2,text = "结果")
button2.pack(side = 'left')
button2.bind("<Button-1>",showResult)


root.mainloop()

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weer-wmq

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值