Tkinter实现简单倒计时按钮

在开发过程中经常会用到,发送验证码,为了避免用户重复操作添加倒计时按钮,下面看看用tkinter如何简单实现。
Tkinter实现简单倒计时按钮_第1张图片

top=tk.Tk()
top.title('倒计时小程序')               #设置窗口标题
top.geometry('300x200')                #设置窗体大小
tim=60                                 #计时时长
def foo():
    global tim                         #标识全局变量
    clock=but.after(1000,foo)          #延迟调用foo,每1000毫秒一次
    tim=tim-1                          #倒计时
    if tim==0:                         #如果倒计时为零时
        but['text']='再次发送'          #按钮文字显示再次发送
        tim=60                         #全局变量复原
        but.after_cancel(clock)        #取消after时钟函数
        but['state']='normal'          #让按钮可用
    else:
        but['state']='disable'         # 让按钮在倒计时期间不可用
        but['text']=str(tim)           #设置按钮显示文字倒计时

def but_click():
    but.after(1000,foo)                #每1000毫秒调用一次foo

but=tk.Button(top,text='倒计时',command=but_click,width=20,bg='yellow')
but.pack(side='top',padx=10,pady=10)

top.mainloop()

Tkinter实现简单倒计时按钮_第2张图片
Tkinter实现简单倒计时按钮_第3张图片是不是很简单!!赶快试试吧!
上面只是一个很简单的示例代码,但是并没有说的完全!
只要对象有after方法是都可以实现tk内部的计时器作用的,下面看一段完整示范:
Tkinter实现简单倒计时按钮_第4张图片以上是倒计时结束效果
Tkinter实现简单倒计时按钮_第5张图片以上是按钮按下效果,标题和按钮显示倒计时
Tkinter实现简单倒计时按钮_第6张图片以上是开始界面
下面上代码

class Count_down():#名字通俗易懂
    def __init__(self,*args,**kwargs):  #随便接受各种参数,没什么鸟用也可以就self
 
        self.master=tk.Tk()   #调用tk模块
        self.master.title('倒计时')#设置标题
        self.master.geometry("400x200")#设置显示大小
        self.but = tk.Button(self.master,text='倒计时',command=self.do_something,fg='blue',font=('微软雅黑','20'))
        self.but.pack(expand='yes',fill='both',padx='20',pady='20')
        #倒计时按钮command参数设置点击调用的函数

    def do_something(self):#单击按钮就调用这货
        time_count=60#倒计时的起始数随便输入任你喜欢
        self.ct_down(time_count)#倒计时函数并且结束后做一些其他动作

    def ct_down(self,n):#倒计时函数
        n=n-1#每次减少一个,减少几个随便
        id=self.master.after(1000,self.ct_down,n)
        #调用after方法自己呼叫自己,有点递归的意思有after方法的组件就可以调用计时器,我直接用self.master了,为什么赋值给id,
        if n != 0:#如果倒计时没有结束
            self.master.title(str(n))#改变标题
            self.but['text'] = str(n)#改变按钮文字
        else:#倒计时结束
            self.master.after_cancel(id)#在这里利用id取消回调
            self.master.title('倒计时完成')
            self.but['text'] = '再次倒计时'

    def run(self):#循环主函数
        self.master.mainloop()


a=Count_down()
a.run()

如果要把倒计时利用到项目上,按钮按下后,需要把按钮的状态设置为不可用,否则一直点,程序就乱套了,对于以上代码需要加上一句:
self.but[‘state’] = ‘disable’
然后循环结束后再来一个
self.but[‘state’] = ‘normal’
这样就可以了!
Tkinter实现简单倒计时按钮_第7张图片
如果还有什么不明白给我留言吧!!

你可能感兴趣的:(python,tkinter)