任务1:秒表计时器的设计
1、下面代码可以实现秒表计时。请将代码补充完整。
2、程序保存到s14A.py。
( ) #从tkinter导入默认组件,补充代码
def update():#定时刷新显示时间
( ),elapsedtime #声明全局变量,补充代码
elapsedtime+=msec
timer=rt.after( )#创建计时器。补充代码
hs=(elapsedtime%1000)//10 #百分秒数
ms=elapsedtime//1000 #总秒数
s=ms%60 #秒数
m=ms//60 #分钟数
timestr.set(f"{m:02d}:{s:02d}:{hs:02d}") #Label组件显示时间
def Start():#计时开始
global elapsedtime,flag
if flag:return #已经开始计时,忽略操作
elapsedtime=0 #计时经过的总毫秒数
update() #启动计时器
flag=1 #标记计时已经开始
def Stop():#停止计时
global flag
rt.after_cancel( ) #补充代码
flag=0
#定义全局变量
flag=0 #标记计时是否开始(0已结束;1已开始)
elapsedtime=0 #计时开始后经过的毫秒数
msec=50 #计时器刷新间隔为50毫秒
timer=0 #计时器
rt=( ) #创建窗体。补充代码
rt.title('秒表计时器') #设置窗口标题
rt.( )('190x50') #设置窗口大小。补充代码
timestr=StringVar() #秒表显示组件Label关联变量
timestr.set("00:00:00") #初始化Label显示
Label(textvariable=timestr).place(x=10,y=15) #创建Label组件,用于显示时间
Button(rt,text='开始',command=( )).place(x=100,y=10) #补充代码
Button(rt,text='停止',command=( )).place(x=140,y=10) #补充代码
rt.mainloop() #窗口消息循环
任务2:四则运算练习系统的设计
1、下面代码可以实现四则运算练习。请将代码补充完整。
2、程序保存到s14B.py。
from tkinter import *
from tkinter import ttk,scrolledtext,messagebox
from random import choice,sample,shuffle
def build(*g): #选择题型时重新组卷
global tmN,stDA,dans,stP,vr #声明全局变量
vr.set(0) #默认当前题(第1题)的选项为第1个
lbA["text"]='第1题:'
stP=( ) #得到当前练习类型编号,需补充代码
tmN=0 #当前练习内容的题号(0-19)
stDA=[4]*20 #学生答案
dans=[0]*20 #正确答案
a=100
if stP>1:a=10
a=range(1,a) #数据范围
ysh="+-*/" #运算符
sTxt['state']='normal' #sTxt可读写
sTxt.( )(1.0,'end')#清空sTxt显示内容,需补充代码
for k in range(20):#随机产生20题
if stP in (0,2): #加法或乘法运算时
n1=choice(a);n2=choice(a)
if stP==0:d=n1+n2
else:d=n1*n2
elif stP==1:#减法
n1=choice(a);n2=choice(range(1,n1+1))
d=n1-n2
else:#除法
n2=choice(a);d=choice(a);n1=n2*d
sTxt.insert(END,f"{k+1}、{n1}{ysh[stP]}{n2}=( )。\n")
dL=sample(range(d+20),4) #可选答案
if d not in dL:dL[0]=d #4个可选答案无正确答案时
( ) #打乱答案顺序,需补充代码
dans[k]=dL.index(d) #保存正确答案序号
s=f"A、{dL[0]}\tB、{dL[1]}\tC、{dL[2]}\tD、{dL[3]}\n\n"
sTxt.( )('end',s) #在sTxt中显示选项,需补充代码
sTxt.config(( )='disabled') #sTxt不能写,需补充代码
def judge(): #答题评阅
global stDA,tmN,vr
m=vr.get() #得到当前题目的答案选项
if m>0:stDA[tmN]=m-1 #保存最后做的一题答案
n=0;pys=''
for i in range(20): #逐题评阅
if stDA[i]==( ): #需补充代码
n+=5;pys+=f'{i+1:02d}-{chr(stDA[i]+65)}√ '
else:pys+=f'{i+1:02d}-{chr(stDA[i]+65)}× '
if i%5==4:pys+="\n"
messagebox.showinfo(title="评阅结果",message=pys+'\n得分:'+str(n))
def goto(e): #选择答案时
global tmN,stDA,vr
if tmN<0:return
n=vr.get() #得到当前题目的答案选项
if n>0:stDA[tmN]=n-1 #保存上一题答案
p=( ) #得到单击选项按钮的索引,需补充代码
if p==0:tmN=0
elif (p==1) and (tmN>0):tmN-=1
elif (p==2) and (tmN<19):tmN+=1
elif p==3:( ) #需补充代码
if stDA[tmN]==4:vr.set(0) #未选择答案时
else:vr.set(stDA[tmN]+1) #更新答案
lbA["text"]=f'第{tmN+1}题:'
def showTis(e): #鼠标移到选题按钮上方时显示提示
n=( )#得到单击选项按钮的索引,需补充代码
ts=("第一题","上一题","下一题","最后一题")
lbB["text"]=ts[n]
def hideTis(e):
lbB['text']='' #清空显示的提示
dans=[];stDA=[];tmN=-1;stP=0#正确答案;学生答案;当前选择题号;当前练习项
mainW=Tk()
mainW.title("四则运算练习系统")
mainW.geometry("760x480")
mainW.config(bg='Brown')
mainW.resizable(width=0,height=0) #窗口不能改变
Label(mainW,text="练习内容:",bg='Brown',fg='Snow',font=("隶书",16)).place(x=10,y=8)
cb=ttk.Combobox(mainW,width=12,font=("隶书",16),state="readonly")
cb["values"]=('加法运算','减法运算','乘法运算','除法运算')
cb.bind('<<ComboboxSelected>>',( )) #需补充代码
cb.place(x=120,y=8)
sTxt=scrolledtext.ScrolledText(mainW,width=60,height=16,font=("隶书",18),bg='Azure')
sTxt.config(bg='Tan',state='disabled')
sTxt.place(x=10,y=40)
btn1=Button(mainW,text="答题评阅",command=judge)
btn1.place(x=686,y=440)
btn1.config(bg='Brown',fg='Snow')
Label(mainW,text='===答题区===',font=("隶书",16),bg='Brown',fg='Snow').place(x=10,y=440)
vr=( ) #需补充代码
vr.set(0)
lbA=Label(mainW,text='第1题:',font=("隶书",16),bg='Brown',fg='Snow')
lbA.place(x=150,y=440)
a=("<<","<",">",">>")
for k in range(4):
Radiobutton(mainW,text=chr(65+k),bg='Brown',variable=vr,value=1+k,
font=("隶书",16)).place(x=230+40*k,y=440)
btn=Button(mainW,text=a[k],bg='Brown',fg='Snow',width=3)
btn.place(x=400+k*40,y=440)
btn.index=k #自定义属性index记录按钮编号
btn.bind('<Button-1>',( )) #需补充代码
btn.bind('<Enter>',showTis)
btn.bind('<Leave>',hideTis)
lbB=Label(mainW,text='',font=("隶书",16),bg='Brown',fg='Snow')
lbB.place(x=560,y=440)#用于显示提示信息
mainW.mainloop()

