• 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()

    结果:

  • 相关阅读:
    OpenST Basic tool library
    本地自旋锁与信号量/多服务台自旋队列-spin wait风格的信号量
    [IOS]mac以太网连接
    Android自己定义控件皮肤
    DirectX11 学习笔记1
    启用QNX系统,海尔智能冰箱或成业界“宝马”
    vu 是什么
    java.lang.NoClassDefFoundError: Lorg/apache/log4j/Logger报错
    关于Maven项目install时出现No compiler is provided in this environment的处理
    taotao购物车
  • 原文地址:https://www.cnblogs.com/ttweixiao-IT-program/p/13469412.html
Copyright © 2020-2023  润新知