首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >同一个窗口中的时钟和计数器

同一个窗口中的时钟和计数器
EN

Stack Overflow用户
提问于 2020-12-02 10:25:29
回答 1查看 57关注 0票数 0

在倒计时结束的时候,我不能从这个代码中去掉一个标签,这个想法是为一个事件设置一个时钟和一个倒计时计时器,而在计数器的末尾,我希望它消失。

代码语言:javascript
复制
from tkinter import *
import time

win = Tk()
win.geometry('400x400')
frame=Frame(win)
frame.grid()
labelTD=Label(frame)
labelTD.grid(row=2,column=0)

def clock():
    t=time.strftime('%A''\n''%D''\n''%I:%M:%S',time.localtime())
    if t!='':
        labelTD.config(text=t,font='infra 50 bold',foreground='black',background='white')
        labelTD.update_idletasks()
        labelTD.after(1000,clock)

def countdown():
    for t in range(12,-1,-1):
    
        Mn = t % 60
        Hr = t // 60

        if int(Hr)<10 and int(Mn)<10:

            xmn = str(Mn).zfill(2)
            xhr = str(Hr).zfill(2)
            label1 = Label(frame, text=(xhr+':'+xmn))
            label1.grid(row=1)

        else:

            label1 = Label(frame, text=(str(Hr).zfill(2)+':'+str(Mn)))
            label1.grid(row=1)

        frame.update()
        time.sleep(1)


labelTD.grid(row=2,column=0)
clock()
countdown()

win.mainloop()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-02 10:38:39

您也应该使用after()作为倒计时,并在函数之外创建倒计时标签:

代码语言:javascript
复制
labelCD = Label(frame)
labelCD.grid()

def countdown(n):
    hr, mn = divmod(n, 60)
    labelCD.config(text=f"{hr:02}:{mn:02}")
    if n > 0:
        labelCD.after(1000, countdown, n-1)
    else:
        labelCD.destroy()

countdown(12)

更新:在hh:mm:ss中显示countdown()

代码语言:javascript
复制
def countdown(n):
    mn, secs = divmod(n, 60)
    hr, mn = divmod(mn, 60)
    labelCD.config(text=f"{hr:02}:{mn:02}:{secs:02}")
    if n > 0:
        labelCD.after(1000, countdown, n-1)
    else:
        labelCD.destroy()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65106224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档