Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使计时器显示秒数?_Python_Tkinter - Fatal编程技术网

Python 如何使计时器显示秒数?

Python 如何使计时器显示秒数?,python,tkinter,Python,Tkinter,我读到一个倒计时计时器可以随着时间而定。sleep()。这是我的尝试。我可以将秒数打印到空闲窗口,但不能打印到Tkinter窗口。这附近有黑客吗 导入时间;从tkinter进口* 秒=11 def启动(计时器): 打印(倒计时(秒,计时器)) def倒计时(秒,计时器): 当秒>=0时: 打印(秒) 如果sec>9: timer.configure(text=str(sec))#“两位数” elif秒>0: timer.configure(文本='0'+str(秒))#'1位' 其他: time

我读到一个倒计时计时器可以随着时间而定。sleep()。这是我的尝试。我可以将秒数打印到空闲窗口,但不能打印到Tkinter窗口。这附近有黑客吗

导入时间;从tkinter进口*
秒=11
def启动(计时器):
打印(倒计时(秒,计时器))
def倒计时(秒,计时器):
当秒>=0时:
打印(秒)
如果sec>9:
timer.configure(text=str(sec))#“两位数”
elif秒>0:
timer.configure(文本='0'+str(秒))#'1位'
其他:
timer.configure(文本='GAME OVER!')
秒-=1
时间。睡眠(1)
win=Tk()
win.configure(bg='black')
页眉=标签(赢,text=“游戏计时器”,fg='蓝色',bg='黑色',font=('Arial Bold',14))
header.pack()
计时器=标签(胜利,浮雕=凹陷,前景='白色',背景='黑色',字体=('Arial',14))
timer.pack(填充=两者,扩展=1)
btn=按钮(win,text='Start',command=lambda:Start(计时器))
btn.pack()
win.mainloop()

所以我们可以做一些事情来改进这一点

  • 我们可以使用
    strftime
    格式化超时,而不是使用if语句来管理格式。这可以做几天,几小时,几分钟,几秒钟等等,但现在我们只需要几秒钟

  • 您希望避免在与tkinter处于同一线程中时使用
    sleep()
    。这是因为这两种方法将阻止主循环,因此当while循环和sleep都阻止主循环时,您将永远看不到显示的时间,只有在while循环和sleep完成后才能看到
    游戏结束

  • 在新行中编写导入内容,并使用
    import tkinter as tk
    而不是
    *
    。这将有助于防止覆盖任何内容

  • 我们可以删除您的一个函数,因为这是一个不需要的额外步骤

  • 要管理tkinter中的定时循环,我们可以使用
    after()

  • 试试这个:

    import tkinter as tk
    import time
    
    
    def count_down(sec):
            if sec > 0:
                timer.configure(text=time.strftime('%S', time.gmtime(sec)))
                win.after(1000, lambda: count_down(sec-1))
            else:
                timer.configure(text='GAME OVER!')
    
    
    win = tk.Tk()
    win.configure(bg='black')
    sec = 11
    
    header = tk.Label(win, text="Game Timer", fg='blue', bg='black', font=('Arial Bold', 14))
    timer = tk.Label(win, relief='sunken', fg='white', bg='black', font=('Arial', 14))
    btn = tk.Button(win, text='Start', command=lambda: count_down(sec))
    
    header.pack()
    timer.pack(fill='both', expand=1)
    btn.pack()
    win.mainloop()
    

    我想你只是想安排你的时间。迈克-史密斯-对不起,但我不太清楚你的意思。你能给我一个提示吗?关于用tkinter创建时钟和计时器,这个网站上可能有很多问题。你做过任何研究吗?@plr108你的编辑对这个问题没有任何改进。将
    Tkinter:
    添加到标题是毫无意义的,因为这就是标记的用途,并且在代码已正确格式化时添加了第二层缩进。我已经把零钱退了。请在编辑过程中多加注意。信息量大!谢谢你给我的建议