在学习python的同时,我决定制作一个数字时钟:
from datetime import datetime
import tkinter as tk
from threading import Thread
import time
class clock():
def __init__(self):
self.display = tk.Tk()
def start(self):
def get():
self.display.geometry("215x62")
self.display.title("Clock")
while True:
try:
now = datetime.now()
current_time = now.strftime("%H:%M %p")
lbl = tk.Label(self.display, text=str(current_time),
background = 'black', font = ("Helvetica", 37),
foreground = 'red')
lbl.place(x=0, y=0)
time.sleep(0.1)
except:
break
receive_thread = Thread(target=get)
receive_thread.start()
self.display.mainloop()
clock = clock()
clock.start()有什么办法让这个钟更好吗?
任何评论,答案,或在正确的方向上的步骤,将不胜感激。
发布于 2021-06-22 23:35:52
首先,停止每秒钟10次创建一个全新的标签是至关重要的。只需修改现有的。而且,这是如此简单,不需要一个类。尽可能远离你的线程,进入你的设置程序。最后,考虑到您还包括了%H,您对%p的使用可能是不正确的;您可能需要一个12小时时钟的%I。
所有这些都表明:
from datetime import datetime
import tkinter as tk
from threading import Thread
from time import sleep
def main():
display = tk.Tk()
display.geometry('215x62')
display.title('Clock')
lbl = tk.Label(
display,
background='black',
font=('Helvetica', 37),
foreground='red',
)
lbl.place(x=0, y=0)
def get():
while True:
now = datetime.now()
lbl.config(text=now.strftime('%I:%M %p'))
sleep(0.1)
receive_thread = Thread(target=get)
receive_thread.start()
display.mainloop()
if __name__ == '__main__':
main()每秒十次都是过度消耗,你可以安全地让这更多的睡眠。根本不要制作线程;使用after()计时器,并计算时钟应该在什么时候滴答:
from datetime import datetime
import tkinter as tk
from time import time
def main() -> None:
display = tk.Tk()
display.geometry('215x62')
display.title('Clock')
lbl = tk.Label(
display,
background='black',
font=('Helvetica', 37),
foreground='red',
)
lbl.place(x=0, y=0)
def tick() -> None:
now = datetime.now()
lbl.config(text=now.strftime('%I:%M %p'))
until_next = round(
1000 * (60 - time()%60)
)
display.after(ms=until_next, func=tick)
tick()
display.mainloop()
if __name__ == '__main__':
main()https://codereview.stackexchange.com/questions/263346
复制相似问题