目标:
编写一个图形化程序,此程序能从数据库检索到题目图形化展现,用户做出选择,然后统计最终得分。
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()
浙公网安备 33010602011771号