Python源码:使用Tkinter写一个诗词答题软件

Python源码:使用Tkinter写一个诗词答题软件_第1张图片
废话不多,直接上源码

# 导入用到的库
import tkinter
from tkinter import *
from tkinter.messagebox import *
import random

# 准备一个诗词题库列表
shici_list = [
    ('词苑千载,群芳竞秀,盛开一枝女儿花"说的是哪位历史上的哪位才女?', 'A.朱淑真', 'B.秦良玉', 'C.李清照', 'C'),
    ('曹操诗句“老骥伏枥,志在千里”中的“枥”是指什么?', 'A.马鞍', 'B.马槽', 'C.马车', 'B'),
    ('被苏轼形容为“诗中有画,画中有诗”的是哪一位诗人:', 'A.王维', 'B.孟浩然', 'C.刘禹锡', 'A'),
    ('毛主席诗《七律》中有“天若有情天亦老,人间正道是沧桑”,请问“天若有情天亦老”出自哪部作品?', 'A.李贺《李凭箜篌引》', 'B.李贺《金铜仙人辞汉歌》', 'C.李贺《雁门太守行》', 'B'),
    ('爆竹声中一岁除,春风送暖入屠苏",这里的"屠苏"指的是:', 'A.庄稼', 'B.房屋', 'C.酒', 'C'),
    ('下列哪句诗不是形容“四大美女”的:', 'A.朝为越溪女,暮作吴宫妃。', 'B.一去紫台连朔漠,独留青冢向黄昏。', 'C.伤心桥下春波绿,曾是惊鸿照影来。', 'C'),
    ('苏轼词作《南乡子·集句》中有“景物登临闲始见,徘徊,一寸相思一寸灰”,请问这一句中集了哪两位诗人的诗句?', 'A.杜甫、李商隐', 'B.白居易、李商隐', 'C.杜牧、李商隐', 'C'),
    ('纳兰性德词句“赌书消得泼茶香,当时只道是寻常”运用了古代哪一对恩爱夫妻的典故?', 'A.卓文君和司马相如', 'B.唐琬和陆游', 'C.李清照和赵明诚', 'C'),
    ('柳永的“衣带渐宽终不悔,为伊消得人憔悴”借用了哪首诗中的意境?', 'A.古诗十九首·行行重行行', 'B.李白·长相思', 'C.诗经·采薇', 'A'),
    ('欧阳修的《浪淘沙》中有“绛纱囊里水晶丸”,这是指哪种水果?', 'A.桂圆', 'B.葡萄', 'C.荔枝', 'C'),
    ('毛泽东经常化用李贺的诗句,下列哪一选项中的诗句不曾被毛泽东化用过?', 'A.衰兰送客咸阳道,天若有情天亦老。', 'B.我有迷魂招不得,雄鸡一声天下白。', 'C.黑云压城城欲摧,甲光向日金鳞开。', 'C'),
    ('假如你的一首五绝诗被杂志社采用,按照正文部分每字5元来计算,你应得多少稿费?', 'A.50', 'B.100', 'C.200。', 'B'),
    ('苏轼在《念奴娇·赤壁怀古》中提到了"羽扇纶巾,谈笑间,樯橹灰飞烟灭","羽扇纶巾"形容的是下面哪位历史人物?', 'A.诸葛亮', 'B.周瑜', 'C.曹操', 'B'),
    ('"问世间情为何物,直教生死相许"这句诗是谁写的?', 'A.元好问', 'B.柳永', 'C.晏殊', 'A'),
    ('态生两靥之愁,娇袭一身之病"是宝玉对黛玉的第一印象,其中"靥"是指:?', 'A.酒窝', 'B.眼睛', 'C.嘴角', 'A'),
]

# 得分情况
def get_score(values):
    # 全局引用num和score变量
    global num
    global score

    # 如果选项和答案相等则答对了
    if s.get() == values[num][4]:
        showinfo("答对啦", "恭喜你答对了!")  # 提示你答对了
        score += 10  # 得分加10分
    # 如果选项和答案不相等则答错了
    else:
        showerror("答错啦", "很遗憾你答错了!")  # 提示你答错了
    num = num + 1  # 记录题号
    # 如果题号已经大于等于题目的总长度则需要进行结束并统计总分数
    if num >= len(values):
        showinfo("得分情况", f"本次答题结束!!\n您的最终得分为{score}分!")  # 提示题目做完了,总结出你的得分
        root.quit()  # 程序退出
        return

    # 显示下一题
    label["text"] = str(num + 1) + '.' + values[num][0]  # 显示题目
    # 显示3个选项
    r1["text"] = values[num][1]
    r2["text"] = values[num][2]
    r3["text"] = values[num][3]
    s.set('E')  # 设置初始值为'E',初始没选中


if __name__ == '__main__':
    root = tkinter.Tk()  # 创建tkinter对象
    root.title('诗词答题考试,满分100,共10题')  # 设置标题
    root.geometry("700x200")  # 设置页面的位置和长宽
    # 从题库中随机抽取10个题目作为考试题
    values = random.sample(shici_list, 10)
    # 创建一个字符串变量用来记录选项值
    s = tkinter.StringVar()
    s.set('E')  # 设置初始值为'E',初始没选中
    # 设置初始题号和分值
    num = 0
    score = 0
    label = tkinter.Label(root, text=values[num][0])  # 用来显示题目
    label.pack()
    # 创建第 1 个 Frame 组件
    f1 = Frame(root)
    f1.pack()
    r1 = tkinter.Radiobutton(f1, variable=s, value='A', text=values[num][1])  # 安装第一个单选按钮
    r1.pack()
    r2 = tkinter.Radiobutton(f1, variable=s, value='B', text=values[num][2])  # 安装第二个单选按钮
    r2.pack()
    r3 = tkinter.Radiobutton(f1, variable=s, value='C', text=values[num][3])  # 安装第三个单选按钮
    r3.pack()
    # 创建第 2 个 Frame 组件
    f2 = Frame(root)
    f2.pack(pady=15)
    # 创建下一题的按钮
    Button(f2, text='下一题', command=lambda: get_score(values)).pack(side=LEFT)

    # 默认显示第一道题目
    label["text"] = str(num + 1) + '.' + values[num][0]  # 显示题目
    # 显示3个选项
    r1["text"] = values[num][1]
    r2["text"] = values[num][2]
    r3["text"] = values[num][3]
    root.mainloop()


完毕!!

你可能感兴趣的:(我的Python教程,python,Tkinter)