废话不多,直接上源码
# 导入用到的库
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()
完毕!!