在博文“python tkinter窗口实现多线程秒表的两种方法”中,第2种创建秒表方法是每秒创建一个新线程,结束旧线程,这样频繁创建新线程,结束旧线程,虽然程序能正常运行,但显然不合理,要消耗大量cpu资源,不是编程的好习惯。很多网页都在介绍这种方法,批评的网页明显少于推荐的网页。
很多人学习python,不知道从何学起。 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。 很多已经做案例的人,却不知道如何去学习更加高深的知识。 那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码! QQ群:961562169 我查了python官方文档,有关定时器对象只给出一个例子如下,并没有在函数中循环创建新线程的例子,即在函数中循环创建新线程不是python官方给出的例子。
def hello(): print("hello, world") t = Timer(30.0, hello) t.start() # after 30 seconds, "hello, world" will be printed设计秒表,只是希望秒表代码在一个线程运行,直到秒表结束。其实使用Timer类也是能做到的,下边是实现的代码,不妥之处,欢迎指正。
from threading import Timer import time import tkinter as tk def hello(): global k,n while n==0: k+=1 label['text']=str(k) time.sleep(1) def do_job(): global n n=1 #t.cancel() #执行此条不能结束,仅当计时器仍处于等待状态时有效。 root = tk.Tk() root.geometry("300x100") k=0 n=0 label=tk.Label(root,text='0',bd='5',fg='red',font=("Arial",15)) label.place(x=10,y=5,width=40,height=30) button1=tk.Button(root,text='停止',command=do_job,fg='red',font=("Arial",15)) button1.place(x=100,y=5,width=60,height=30) t = Timer(1, hello) t.setDaemon(True) t.start() root.mainloop()