繁体   English   中英

在 Python 和 Tkinter 中使用 time.sleep()

[英]Use of time.sleep() in Python with Tkinter

我有一个小程序(一个更大项目的一部分)来显示 10 个随机数,但延迟很小。 当我在终端中运行它时它自己的功能起作用,但是当我尝试在 Tkinter 中显示它时它只显示随机数但没有时间延迟? (如果我使用按钮,每次都会出现一个随机数?)


import random, time
import tkinter as tk

window = tk.Tk()
window.title("Cirkus Arcus tidsmaskine!")
window.geometry("800x800")

#---FUNCTIONS----

def  random_number():
    counter = 0      
    while counter<10:
        num = random.randint(1000,3000)         
        num10 = int(num / 10) * 10             
        time.sleep(0.2) 
        counter = counter + 1          
        return (num10)

---显示----

def number_display2():
    randomNumber = random_number()

    # This creates a text field
    number_display2 = tk.Text(master=window, height=10, width=30)
    number_display2.grid(column=0, row=4)
    number_display2.insert(tk.END, randomNumber)

- -纽扣 - -

button2 = tk.Button(text="Prøv også mig", command=number_display2)
button2.grid(column=1, row=2)

window.mainloop()

time.sleep() 的使用会阻塞程序。

文档中 time.sleep() 的定义是:

暂停执行调用线程给定的秒数。

如果你想在 Tkinter 中延迟你可以使用 after() 方法,

.after(delay, callback=None) 是为所有 tkinter 小部件定义的方法。 此方法只是在给定的延迟(以毫秒为单位)之后调用函数回调。 如果没有给出函数,它的作用类似于 time.sleep (但以毫秒而不是秒为单位)

你必须使用:

window.after(10000)  # 10000 means 10s

当涉及到 Tkinter 时,我建议使用“after”方法。 关于这个话题还有其他几个问题。 请注意,延迟以毫秒为单位,而不是time.sleep()使用的秒数

import tkinter as tk
import random
root=tk.Tk()
def random_number():
    counter = 0   
    while counter<10:
       num = random.randint(1000,3000)         
       num10 = int(num / 10) * 10             
       print(counter)
       print(num10)
       counter = counter + 1
    return(num10)
root.after(2000,random_number)
root.mainloop()

这有效,但我的内核在完成后继续运行

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM