目录

  • 1 前言
    • 1.1  Python解释器安装
    • 1.2  PyCharm开发环境
  • 2 Python程序设计实验
    • 2.1  实验1 基本输入输出
    • 2.2  实验2 基本运算
    • 2.3  实验3 字符串处理
    • 2.4  实验4 列表与元组应用
    • 2.5  实验5 列表与元组应用
    • 2.6  实验6 字典与集合应用
    • 2.7  实验7 函数应用1
    • 2.8  实验8 函数应用2
    • 2.9  实验9 类的创建与应用
    • 2.10  实验10 模块应用
    • 2.11  实验11 文件操作
    • 2.12  实验12 异常处理
    • 2.13  实验13 使用正则表达式
    • 2.14  实验14 tkinter基础应用
  • 3 学习参考
    • 3.1  1 Python及其IDLE环境
    • 3.2  2 Python代码规范
    • 3.3  3 使用变量
    • 3.4  4 输入输出
    • 3.5  5 运算符
    • 3.6  6 字符串
    • 3.7  7 条件语句
    • 3.8  8 循环语句
    • 3.9  9 列表
    • 3.10  10 元组
    • 3.11  11 字典
    • 3.12  12 集合
    • 3.13  13 自定义函数
    • 3.14  14 内置函数
    • 3.15  15 类的创建和使用
    • 3.16  16 类的继承与多态
    • 3.17  17 time模块
    • 3.18  18 os模块
    • 3.19  19 random模块
    • 3.20  20 文件
    • 3.21  21 错误与异常处理
 实验14 tkinter基础应用

任务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()