Вы не можете использовать только time.sleep(1)
, чтобы видеть обновления каждую секунду, вы должны обновить главное окно.И вы создаете виджет размером 5 Text
каждые 1 секунду, одного достаточно.Просто сделайте один вне цикла и обновите его.
Как-то так ..
from tkinter import*
import random, time
wn=Tk()
wn.geometry("300x300")
mytext=Text(wn,bg="pink",width=30,height=200)
mytext.pack()
for i in range(5):
loto = random.sample( range(1,30),6)
mytext.insert('end', str(loto) + '\n')
wn.update()
time.sleep(1)
wn.mainloop()
Хотя это не рекомендуемый способ зацикливания чего-то в tkinter, нодля маленьких петель и подобных целей это хорошо использовать.Если вы планируете зациклить что-то большое, например, обновить много текста, виджетов и изображений в tkinter, тогда используйте функцию after()
( Как использовать after ()? ).Вкратце after
вызывает функцию в каждом заданном интервале, поэтому, помещая ее в функцию, она продолжает вызывать одну и ту же функцию до тех пор, пока вы не остановите ее, может быть остановлена различными способами см. Этот пост о том, как остановить после .
С использованием after():
from tkinter import*
import random, time
wn=Tk()
wn.geometry("300x300")
mytext=Text(wn,bg="pink",width=30,height=200)
mytext.pack()
def update(c=0):
if c < 5: # Runs 5 times
loto = random.sample( range(1,30),6)
mytext.insert('end', str(loto) + '\n')
wn.after(1000, update, c+1) # after( ms, func, args )
update() # Called the function once
wn.mainloop()