Tkinter在Python中使用time.sleep()

时间:2019-12-19 16:05:58

标签: python tkinter

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


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()

2 个答案:

答案 0 :(得分:0)

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

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

  

以给定数目的中断执行调用线程   秒。

如果要延迟Tkinter,可以使用after()方法,

  

.after(delay,callback = None)是为所有tkinter定义的方法   小部件。此方法仅在   给定延迟(以毫秒为单位)。如果未提供任何功能,则其作用类似于   time.sleep(但以毫秒为单位,而不是秒)

您必须使用:

window.after(10000)  # 10000 means 10s

答案 1 :(得分:0)

对于Tkinter,我建议使用“之后”方法。关于此主题还有其他几个问题。请注意,延迟以毫秒为单位,而不是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()

这行得通,但是我的内核在完成后仍然可以运行