python生成试题库和界面 (python generate test database and layout)

来自 《Python项目案例开发从入门到实战》(清华大学出版社 郑秋生 夏敏捷主编)中 数据库应用--智力问答测试

生成试题库以及界面代码:

注意: 要使代码运行成功,需要先看上一篇文章 python生成数据库(python generate database) 先生成 test_bank.db 数据库才可以运行成功

 

  1 import tkinter  # Tkinter模块是python的标准Tk GUI工具包的接口
  2 # from tkinter import *
  3 # from tkinter.messagebox import *
  4 from tkinter import messagebox
  5 import sqlite3
  6 
  7 
  8 # 调用下一道题目函数
  9 def callNext():
 10     # 设置k和score为全局变量
 11     global k
 12     global score
 13     # 得到单选按钮的结果
 14     useranswer = r.get()
 15     print(r.get())
 16 
 17     # 判断答案是否为空
 18     if useranswer == 'E':
 19         messagebox.showinfo("出错", "请先完成本题")
 20     # 判断答案是否等于正确答案
 21     elif useranswer == values[k][5]:
 22         # 如果相同则提示答对信息,messagebox是消息窗口组件
 23         messagebox.showinfo("恭喜", "恭喜你对了")
 24         # 添加分数
 25         score += 10
 26         # 跳转到下一题
 27         k = k + 1
 28     else:
 29         # 打错了则提示错误提示
 30         messagebox.showinfo("遗憾", "遗憾你错了")
 31         # 跳转到下一题
 32         k = k + 1
 33 
 34     # 判断是否是最后一道题目
 35     if k >= len(values):
 36         messagebox.showinfo("提示", "题目做完了")
 37         return
 38     # 修改timu, radio1, radio2, radio3, radio4中的文本值
 39     timu["text"] = values[k][0]
 40     radio1["text"] = values[k][1]
 41     radio2["text"] = values[k][2]
 42     radio3["text"] = values[k][3]
 43     radio4["text"] = values[k][4]
 44     # 默认值还是设置为没有选中
 45     r.set('E')
 46 
 47 
 48 # 查看结果函数
 49 def callResult():
 50     tkinter.messagebox.showinfo("你的得分", str(score))
 51 
 52 
 53 # 连接到 test_bank 数据库
 54 conn = sqlite3.connect('test_bank.db')
 55 # 创建游标对象
 56 cursor = conn.cursor()
 57 # 查询 exam 数据库表
 58 cursor.execute('select * from exam')
 59 # 提取查询到的数据存在values变量中
 60 values = cursor.fetchall()
 61 # 关闭cursor对象
 62 cursor.close()
 63 # 关闭connect对象
 64 conn.close()
 65 
 66 # 创建窗口对象
 67 root = tkinter.Tk()
 68 # 设置窗口标题
 69 root.title('Python 智力问答游戏')
 70 # 设置初始窗口大小为500*200
 71 root.geometry("500x200")
 72 # 创建一个StringVar()对象
 73 r = tkinter.StringVar()
 74 # 设置初始值为'E',即没有选中
 75 r.set('E')
 76 # 记录当前的题目指数
 77 k = 0
 78 # 记录得到的分数值
 79 score = 0
 80 # Label是标签组件,可以显示文本和位图
 81 # 新建timu标签组件,标签的文本值是values中的[k][0]
 82 timu = tkinter.Label(root, text=values[k][0])
 83 # 将timu标签组件添加到窗口中显示
 84 timu.pack()
 85 # Frame是框架控件,在屏幕上显示一个矩形区域,多用来作为容器
 86 # 新建第一个Frame组件
 87 f1 = tkinter.Frame(root)
 88 # 将组件添加到窗口中显示
 89 f1.pack()
 90 # Radiobutton是单选按钮控件,显示一个单选的按钮状态
 91 # 用户可以使用variable属性为Radiobutton组件指定一个对应的变量。如果将多个Radiobutton组件绑定到同一个变量,则这些Radiobutton组件
 92 # 属于一个分组,分组后需要使用value设置每个Radiobutton的值,以标识该项目是否被选中。
 93 # 在框架控件f1中新建一个单选的按钮控件,并且指定单选按钮按下的变量值,单选按钮选中时变量的值value和单选按钮显示的文本内容text
 94 radio1 = tkinter.Radiobutton(f1, variable=r, value='A', text=values[k][1])
 95 # 将组件添加到窗口中显示
 96 radio1.pack()
 97 # 在框架控件f1中新建一个单选的按钮控件,并且指定单选按钮按下的变量值,单选按钮选中时变量的值value和单选按钮显示的文本内容text
 98 radio2 = tkinter.Radiobutton(f1, variable=r, value='B', text=values[k][2])
 99 # 将组件添加到窗口中显示
100 radio2.pack()
101 # 在框架控件f1中新建一个单选的按钮控件,并且指定单选按钮按下的变量值,单选按钮选中时变量的值value和单选按钮显示的文本内容text
102 radio3 = tkinter.Radiobutton(f1, variable=r, value='C', text=values[k][3])
103 # 将组件添加到窗口中显示
104 radio3.pack()
105 # 在框架控件f1中新建一个单选的按钮控件,并且指定单选按钮按下的变量值,单选按钮选中时变量的值value和单选按钮显示的文本内容text
106 radio4 = tkinter.Radiobutton(f1, variable=r, value='D', text=values[k][4])
107 # 将组件添加到窗口中显示
108 radio4.pack()
109 
110 # 创建第2个Frame框架组件
111 f2 = tkinter.Frame(root)
112 # 将组件添加到窗口中显示
113 f2.pack()
114 # 在f2框架上新建Button组件,text表示按钮显示的内容,command表示点击按钮时执行的函数,side表示将Button组件添加到窗口中显示,左停靠
115 tkinter.Button(f2, text='下一题', command=callNext).pack(side=tkinter.LEFT)
116 # 在f2框架上新建Button组件,text表示按钮显示的内容,command表示点击按钮时执行的函数,side表示将Button组件添加到窗口中显示,左停靠
117 tkinter.Button(f2, text='结 果', command=callResult).pack(side=tkinter.LEFT)
118 
119 # 进入消息循环,也就是显示窗口
120 root.mainloop()

 

结果:

posted @ 2020-08-10 14:01  ttweixiao9999  阅读(1252)  评论(0编辑  收藏  举报