当前位置:   article > 正文

python创建窗口接收消息延迟_解决python tkinter 与 sleep 延迟问题

python time.sleep无法使界面延迟变化

多线程(threading——join)

join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,

才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法。join([timeout]) 里面的参数时可选的,代表线程运行的最大时

间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接着执行的,如果线程执行时间小于参数表示的

时间,则接着执行,不用一定要等待到参数表示的时间。

1 importthreading2 importtime3 #创建两个测试的变量

4 num_1 =05 num_2 =06 defte_1():7 globalnum_18 #将num_1加到 3

9 for i in range(3):10 num_1 += 1

11 print("我是num_1:" +str(num_1))12 time.sleep(1)13 defte_2():14 globalnum_215 #将num_2加到 3

16 for i in range(3):17 num_2 += 1

18 print("我是num_2:" +str(num_2))19 time.sleep(1)20 t1 = threading.Thread(target=te_1)21 t1.start()22 t2 = threading.Thread(target=te_2)23 #join为等待线程,等待t1线程执行完,再执行t2线程

24 t1.join()25 t2.start()

多线程(threading——setDeamon)

setDaemon()方法。主线程A中,创建了子线程B,并且在主线程A中调用了B.setDaemon(),这个的意思是,把主线程A设置为守护线程,这

时候,要是主线程A执行结束了,就不管子线程B是否完成,一并和主线程A退出.这就是setDaemon方法的含义,这基本和join是相反的。此外,还有

个要特别注意的:必须在start() 方法调用之前设置,如果不设置为守护线程,程序会被无限挂起,只有等待了所有线程结束它才结束。

1 importthreading2 importtime3 #创建两个测试的变量

4 num_1 =05 num_2 =06 defte_1():7 globalnum_18 #将num_1加到 3

9 for i in range(3):10 num_1 += 1

11 print("我是num_1:" +str(num_1))12 time.sleep(1)13 defte_2():14 globalnum_215 #将num_2加到 5

16 for i in range(5):17 num_2 += 1

18 print("我是num_2:" +str(num_2))19 time.sleep(1)20 t1 = threading.Thread(target=te_1)21 t1.start()22 t2 = threading.Thread(target=te_2)23 #守护进程t2,当t1执行完后不再去执行t2

24 t2.setDaemon(t1)25 t2.start()

下面是如何解决time.sleep,其实非常简单,只需要创建一个线程让他自己执行就可以了

1 """小白随笔,大佬勿喷"""

2 ‘‘‘tkinter解决time延迟问题‘‘‘

3 importtkinter as tk4 importtime5 importthreading6 #初始化窗口

7 window =tk.Tk()8 #窗口名称

9 window.title("My Window")10 #窗口大小,是 x 不是 *

11 window.geometry("400x400")12 #不能改变窗口的大小

13 window.resizable(width=False,height=False)14 defcount():15 label = tk.Label(window,bg=‘green‘)16 label.pack()17 button.pack()18 whileTrue:19 try:20 #获取当前时间

21 date = time.strftime("%Y-%m-%d\n%H:%M:%S")22 label.config(text=date)23 #更新窗口

24 window.update()25 time.sleep(1)26 except:27 break

28 #创建按钮,只是为了测试sleep与按钮之间是否存在延迟

29 button = tk.Button(window,text=‘Hit_me‘,width=20)30 #创建线程,如果函数里面有参数,args=()

31 t = threading.Thread(target=count)32 #开启线程

33 t.start()34 #循环窗口

35 window.mainloop()

技术有限,不会录制gif图

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/124898
推荐阅读
相关标签
  

闽ICP备14008679号