初学者一枚:网上找的例程,改了改--倒数计时器

初学python,前一阵子用到倒数计时器,感觉没有分段提示功能,就想自己练练手,网上找了倒数计时器的例程,改了改,做成可以双段计时(一般招聘时,控制总时长,以及个人陈述时长),单段计时。

# coding:utf-8#
from tkinter import *
import turtle, time
import winsound
import math
import tkinter.font as tkFont


global sec_min,minites,entry1, entry2,entry3, entry4, entry5,entry6, alm_1,alm_2

def drawGap():   #   笔画之间间隔
    turtle.penup()
    turtle.fd(tw_gap)

def drawLine(draw):
    drawGap()
    turtle.pendown() if draw else turtle.penup()
    turtle.fd(line_long)   #笔画长度
    drawGap()
    turtle.right(90)

def drawPoint():
    turtle.left(90)     #  向上移动100,落笔然后向下长度40
    turtle.penup()
    turtle.fd(point_move)
    turtle.pendown()
    turtle.right(180)
    turtle.fd(point_long)
    turtle.penup()
    turtle.fd(point_move)      #  抬笔向下移动100,落笔然后向下长度40
    turtle.pendown()
    turtle.fd(point_long)
    turtle.left(90)
    drawGap()

def drawDigit(d):
    drawLine(True) if d in [2, 3, 4, 5, 6, 8, 9] else drawLine(False)  # g
    drawLine(True) if d in [0, 1, 3, 4, 5, 6, 7, 8, 9] else drawLine(False)  # c
    drawLine(True) if d in [0, 2, 3, 5, 6, 8, 9] else drawLine(False)  # d
    drawLine(True) if d in [0, 2, 6, 8] else drawLine(False)  # e
    turtle.left(90)  # 经历一次右转后,调整左转,方向竖直向上
    drawLine(True) if d in [0, 4, 5, 6, 8, 9] else drawLine(False)
    drawLine(True) if d in [0, 2, 3, 5, 6, 7, 8, 9] else drawLine(False)
    drawLine(True) if d in [0, 1, 2, 3, 4, 7, 8, 9] else drawLine(False)
    turtle.left(180)
    turtle.penup()
    turtle.fd(other_long)   #  数字之间距离

def drawDate(date):
    #turtle.pencolor('blue')
    if '+' in date:
        for i in date:
            if i == '-':
                #turtle.fd(80)
                drawPoint()
                #turtle.pencolor('green')
                turtle.fd(point_long)
                turtle.penup()
                turtle.left(90)
                turtle.fd(other_long)
                turtle.right(90)
            elif i == '=':
                #turtle.fd(80)
                drawPoint()
                #turtle.pencolor('blue')
                turtle.fd(point_long)
                turtle.penup()
                turtle.left(90)
                turtle.fd(other_long)
                turtle.right(90)
            elif i == '+':
                turtle.write('', font=('Arial', 18, 'normal'))
                #turtle.pencolor('yellow')
                turtle.fd(other_long)
            else:
                drawDigit(eval(i))
    else:
        turtle.goto(tw_left,-50)
        turtle.write(date, font=('Arial', 240, 'normal'))   # 打印超时文字

def init():
    turtle.setup(tw_width-8, tw_high,0,0)  # 设置画布大小 200 200 为屏幕位置
    turtle.bgcolor("black")
    turtle.speed(10)
    turtle.penup()
    turtle.goto(0, 0)
    turtle.fd(tw_left)     # 画笔起始位置
    turtle.pensize(tw_pensize)    #    笔画线宽

def main(book_time):
    global sec_min, minites, entry1, entry2
    #time.sleep(10)
    over_flag = False
    beep_flag = True
    # count = book_time - time.time() + 0    # 画面延时n秒自动关闭
    try:
        while True:
            over_time = book_time - time.time()
            # count -= 1
            if over_time > 0:
                time_string = time.strftime("%M=%S+", time.localtime(over_time))
            else:
                time_string = 'Time out !!!'
                over_flag = True
            turtle.clear()
            init()
            turtle.getscreen().tracer(30, 0)
            if over_time>sec_min+alm_1:               #    第一段时间,绿色显示
                turtle.pencolor('green')
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            elif sec_min < over_time < sec_min+alm_1:
                turtle.pencolor('red')               #    第二段时间,蓝色显示
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            elif alm_2 < over_time < sec_min:
                turtle.pencolor('blue')               #    第二段时间,蓝色显示
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            else:
                turtle.pencolor('red')               #    倒计时一分钟,红色显示
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            time.sleep(1)
            turtle.hideturtle()
            if over_flag and beep_flag:
                for i in range(1):     #  i 控制提示音播放的长短
                    winsound.Beep(int(1000 * math.sin(i / 6.28) + 700), 100)
                beep_flag = False
    except:
        pass

def main1(book_time):
    global minites, entry1, entry2
    #time.sleep(10)
    over_flag = False
    beep_flag = True
    # count = book_time - time.time() + 0    # 画面延时n秒自动关闭
    try:
        while True:
            over_time = book_time - time.time()
            # count -= 1
            if over_time > 0:
                time_string = time.strftime("%M=%S+", time.localtime(over_time))
            else:
                time_string = 'Time out !!'
                over_flag = True
            turtle.clear()
            init()
            turtle.getscreen().tracer(30, 0)
            if over_time>alm_1:               #    第一段时间,绿色显示
                turtle.pencolor('green')
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            else:
                turtle.pencolor('red')               #    倒计时一分钟,红色显示
                drawDate(time_string)   #  格式化时间 2017-05=02+ 控制输入年日月
            time.sleep(1)
            turtle.hideturtle()
            if over_flag and beep_flag:
                for i in range(1):     #  i 控制提示音播放的长短
                    winsound.Beep(int(1000 * math.sin(i / 6.28) + 700), 100)
                beep_flag = False
    except:
        pass


def aaaaaa():
    global sec_min,minites,entry1, entry2,entry3, entry4, entry5,entry6, alm_1,alm_2

    minites = int(entry1.get())*60
    sec_min =minites - int(entry2.get())*60
    if sec_min <0:
        alm_box=Tk()
        alm_box.title("警告")
        alignstr = '%dx%d+%d+%d' % (200, 150, width/2-100, high/2-75)
        alm_box.geometry(alignstr)
        Label(alm_box, text="双段总时长应\n大于第一段时长",font=('微软雅黑', 20, 'bold'),fg='red').grid(row=0, column = 0)
        Label(alm_box, text="!!!!!!", font=('微软雅黑', 20, 'bold'), fg='red').grid(row=1, column=0)
        alm_box.mainloop()
    alm_2 = int(entry4.get())
    alm_1 = int(entry5.get())
    book_time = time.time() + minites
    main(book_time)


def aaaa():
    global sec_min,minites,entry1, entry2, entry3, entry4, entry5,entry6,alm_1,alm_2

    minites = int(entry3.get())*60
    alm_1 = int(entry6.get())
    book_time = time.time() + minites
    main1(book_time)


#=============================================================================================================
root = Tk()
root.title("倒计时器")

minites = 3600 * 0.1
width = int(root.winfo_screenwidth())
high = int(root.winfo_screenheight())
tw_width=int(width)
tw_high=int(high*0.9)
tw_x=int(width*0.05)
tw_y=int(high*0.1)
tw_gap=int(width/100*1.5)
tw_pensize=int(width/100*3)
tw_left=int(-width*0.48)
line_long=int(tw_width*0.17)
point_long=int(width*0.02)
point_move=int(width*0.06)
other_long=int(width*0.04)
book_time = time.time() + minites

if width <1000 :
    fontsize = 10
    tkw_high = 70
else:
    fontsize = 13
    tkw_high = 100
alignstr = '%dx%d+%d+%d' % (800, 600, 0,0)
root.geometry(alignstr)
ft2  = tkFont.Font(family="微软雅黑",size=fontsize, weight=tkFont.BOLD)
Label(root,text = " ", width=1, font=ft2).grid(row = 0, column = 0)

Label(root,text = "双段总时长(分)", width=12, font=ft2,relief='raised').grid(row = 0, column = 1)
entry1=Entry(root, width=3, font=ft2)
entry1.grid(row = 0, column = 2)

Label(root,text = "提前(秒)提醒", width=10, font=ft2,bg='yellow',relief='raised').grid(row = 0, column =3)
entry4=Entry(root, width=3, font=ft2)
entry4.grid(row = 0, column = 4)

Label(root,text = "第一段时长(分)", width=12, font=ft2,relief='raised').grid(row = 0, column = 5)
entry2=Entry(root,  width=3, font=ft2)
entry2 .grid(row = 0, column = 6)

Label(root,text = "提前(秒)提醒", width=10, font=ft2,bg='yellow',relief='raised').grid(row = 0, column = 7)
entry5=Entry(root,  width=3, font=ft2)
entry5 .grid(row = 0, column = 8)

Button(root, text="开始计时",width=10, font=ft2,bg='blue',fg='white',relief='raised', command=aaaaaa).grid(row = 0, column =9)
entry1.insert(0, 10)
entry2.insert(0, 3)
entry4.insert(0, 60)
entry5.insert(0, 30)


Label(root,text = "单段总时长(分)", width=12, font=ft2,relief='raised').grid(row = 1, column = 5)
entry3=Entry(root, width=3, font=ft2)
entry3.grid(row = 1, column = 6)

Label(root,text = "提前(秒)提醒", width=10, font=ft2,bg='yellow',relief='raised').grid(row = 1, column = 7)
entry6=Entry(root, width=3, font=ft2)
entry6.grid(row = 1, column = 8)

Button(root, text="开始计时", font=ft2,width=10,bg='darkblue',relief='raised',fg='white', command=aaaa).grid(row = 1, column =9)
entry3.insert(0, 3)
entry6.insert(0, 30)
Label(root,text = "说明:\n"
                  "一、本倒计时器有两种模式,双段模式、单段模式,可分别设置参数,单独启动;\n"
                  "二、双段模式:\n"
                  "      可设置总时长(分钟)最长60分钟,第一段时长(分钟),总时长必须大于第一段时长;\n"
                  "      第一段结束前(秒)提醒,总时长结束前(秒)进行提醒;\n"
                  "      启动后时间为绿色,第一段结束前提醒时变为红色,\n"
                  "      第一段结束后,颜色变为蓝色,总时间结束前提醒,颜色又变为红色;\n"
                  "三、单段模式:\n"
                  "       可设置总时长(分钟)最长60分钟,结束前(秒)进行提醒;\n"
                  "       启动后时间为绿色,结束前提醒,颜色变为红色。"
                  , width=70,height=10, font=ft2,bg='lightyellow',anchor='nw',justify='left',relief='raised').grid(row = 2, column = 1,columnspan=9)

root.mainloop()

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值