当前位置 博文首页 > python实现简单倒计时功能

    python实现简单倒计时功能

    作者:一条小白鱼 时间:2021-07-03 17:45

    使用python实现简单倒计时exe,供大家参考,具体内容如下

    使用tkinter制作界面实现倒计时功能。

    • 使用time.sleep(1)实现 秒级 倒计时
    • 使用线程避免界面卡死
    • 在线程的循环中检测全局标志位,保证计时线程的重置、以及退出
    • 使用pyinstaller -F file.py -w 生成exe文件,-w表示隐藏控制台,-F表示生成单文件

    代码如下:

    #!/usr/bin/python3.8
    # -*- coding: utf-8 -*-
    # @Time    : 2021/4/19 14:09
    # @Author  : dongdong
    # @File    : CountdownGUI.py
    # @Software: PyCharm
    
    from tkinter import *
    import time
    import threading
    def cyclethread():
        global counttime
        global restartflag
        global runflag
        restartflag=False
    
        if (timestr.get().isdigit()):
            counttime = int(timestr.get()) * 60
        else:
            runflag=False
            return;
        while (1):
            if(restartflag):
                counttime = int(timestr.get()) * 60
                restartflag=False
            if(exitflag):
                sys.exit()
    
            counttime=counttime-1
            v='\nleft time:'+str(counttime//60)+' :'+str(counttime%60)
            textshow.set(v)
            root.update()
            if (counttime <= 0):
                runflag = False
                return
            time.sleep(1)
    
    def startCount():
        global  restartflag
        global runflag
        restartflag=True
        if( not runflag):
            th=threading.Thread(target=cyclethread)
            th.setDaemon(True)
            th.start()
            runflag = True
    
    def exitfun():
        global exitflag
        exitflag=True
        sys.exit()
    
    restartflag=False
    exitflag=False
    counttime=None
    runflag=False
    root=Tk()
    root.geometry('250x120')
    root.title('TimeCounter')
    
    timestr = StringVar(value="30")
    textshow=StringVar(value='\nCountDown:30min ')
    
    text0=Label(root,text='Input time(min):').grid(row=0,column=0,columnspan=3)
    entext=Entry(root,textvariable=timestr).grid(row=0,column=3,columnspan=1)
    
    # bnframe=ttk.Frame(root).grid(row=1,column=0,columnspan=4)
    stbn=Button(root,text='Start',command=startCount).grid(row=1,column=2,columnspan=1)
    enbn=Button(root,text='Exit',command=exitfun).grid(row=1,column=3,columnspan=1)
    
    text=Label(root,textvariable=textshow).grid(row=2,column=0,columnspan=4)
    root.mainloop()
    jsjbwy
    下一篇:没有了