基于tkinter的答案系统设计

结果展现

1.1考试过程截图

图1-1开始界面
图1-2考试界面-选择题
图1-3考试界面-填空题
图1-4考试结果界面
图1-5错题查看界面

1.2提示界面截图

图1-6难度选择提示
图1-7交卷提示
图1-8考试时间到提示

1.3说明

这里先展示结果,以后可能会有详细的模块设计介绍。欢迎大家留言讨论,大家可以留言交流下在用tkinter上遇到的困难以及怎么解决的。可以留言讨论在设计类似的东西时,遇到的困难,我会第一时间回复大家。

-----我是分割线【2020/2/27】-----

模块设计

2.1倒计时模块

2.1.1设计思想:

首先在设计倒计时模块之前需要明白两点。第一点不能用time模块的sleep方法来实现,因为在sleep的情况下,禁止了一切操作,这时就不能完成其它的操作。第二点就是在设计tkinter时,最后要执行tkinter.mainloop语句,也就是整个tkinter实际上处于一种循环状态,所以在设计的类中或者在执行这条语句之前,不能出现死循环。
基于上面两点,所以这里采用的是after这个函数。函数的格式为after(x,fun),表示经过x毫秒后,执行fun函数。这个把fun函数设置为本身,也就是经过x毫秒后再次执行这个函数,相当于递归。这样就能保证时间更新的及时,同时在更新时间的情况下可以进行其他操作。
下面说说我的算法,首先设置一个基准时间(理论上可以随便设计),然后第一计算出当前时间与基准时间差(称为时间1)。第二计算出当前时间加上倒计时设置的时间,这是目标时间(称为时间2),注意时间2只在一开始时计算,也就是当前时间和倒计时时间确定下来了,它就是一个定值。因为当前时间是在不断增加的,也就是时间1在不断变化。但是时间2不变,所以时间2减去时间1就是倒计时的时间。(ps:在想时间的计算时,不用纠结于时分秒,把它都当作为秒较好理解)
在这里插入图片描述

2.1.2代码展示

import time
from datetime import datetime
#---省略部分---
  now_time=datetime.now() #获取当前时间
  base_time=datetime.strptime('2020-01-01 00:00:00','%Y-%m-%d %H:%M:%S') #基准时间
  dalta=now_time-base_time #距离基准时间差
  self.dec_sec=dalta.seconds+self.sum_sec #目标时间 作为判断条件
  
 def dispaly_time(self):
  now_time=datetime.now() #获取当前时间
  base_time=datetime.strptime('2020-01-01 00:00:00','%Y-%m-%d %H:%M:%S') #基准时间
  dalta=now_time-base_time #距离基准时间差 (一直在变化)
  count_down=self.dec_sec-dalta.seconds #距离目标时间差
  count_house=int(count_down/60/60)
  count_minu=int((count_down-count_house*60*60)/60)
  count_sec=count_down-count_house*60*60-count_minu*60
  time_text=str(count_house) + '时' + str(count_minu) + '分' + str(count_sec) + '秒'
  clock=TKI.Label(self.interface,text=time_text,font=('Arail',15))
  clock.place(x=self.tk_width-210,y=10)
  self.use_time=self.sum_sec-count_down #所用时间(s)
  if count_down!=0:
   clock.after(200,self.dispaly_time)
  else :
   self.test_flag=True  #时间到,交卷标志

2.2时间设置模块

思想:
时间设置模块就简单多了,只要设置几个标签,然后提取标签的值计算总的秒数即可。在设置模块时,按照时间设计的传统思想——秒数和分数加到60应该归零,减到零应该变60,时数可以任意,只要不出现负数即可。为了防止代码的复用,采用标志位标志是加是减,是小时还是分钟还是秒钟。

2.2.1代码展示

  button_p=TKI.Button(self.interface_2,text='+',command=lambda:self.time_set(self.House,flag_house=1,flag_plus=1))
  button_d=TKI.Button(self.interface_2,text='-',command=lambda:self.time_set(self.House,flag_house=1,flag_plus=0))
  button_p1=TKI.Button(self.interface_2,text='+',command=lambda:self.time_set(self.Minu,flag_house=0,flag_plus=1))
  button_d1=TKI.Button(self.interface_2,text='-',command=lambda:self.time_set(self.Minu,flag_house=0,flag_plus=0))
  button_p2=TKI.Button(self.interface_2,text='+',command=lambda:self.time_set(self.Sec,flag_house=0,flag_plus=1))
  button_d2=TKI.Button(self.interface_2,text='-',command=lambda:self.time_set(self.Sec,flag_house=0,flag_plus=0))

def time_set(self,string,flag_house,flag_plus):
  """按钮设置时间函数"""
  num=int(string.get())
  if flag_house==0: #非小时
   if flag_plus==1 : #加
    if num==60:
     num=-1
    num=num+1
   elif flag_plus==0 : #减
    if num==0:
     num=60+1
    num = num-1
   string.set(str(num))
  elif flag_house==1: #小时
   if flag_plus==1: #加
    num=num+1
   elif flag_plus==0: #减
    if num==0:
     num=24+1
    num = num-1
   string.set(str(num))

-----我是分割线【2020/2/27】-----

代码文件分享

3.1exe文件

exe文件
密码:4i4w4a

3.2 源码

源代码
密码:n83v75

  • 10
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值