Открытие окон в tkinter с задержкой
Подскажите, у меня в коде используется несколько окон(в виде сердечка))), и я хочу чтобы они открывались не сразу все, а по очереди с небольшой задержкой, как это сделать?(И чтобы следующее окно открывалось без закрытия прошлого, чтоб по итогу вышел рисунок из окон). Пытался через time.sleep не получилось, пытался что то сделать через .after тоже не помогло. (код урезал, но думаю вопрос понятен) Вот код:
import turtle
import time
import os
from urllib.request import urlopen
def main():
window1 = Tk()
window1.resizable(0, 0)
window1.geometry('200x200+700+617')
canvas_1 = Canvas(window1, width=200, height=200)
canvas_1.pack()
img1 = PhotoImage(file='img_heart_from_windows\ded.png')
canvas_1.create_image(18, 10, anchor=NW, image=img1)
window2 = Toplevel()
window2.resizable(0, 0)
window2.geometry('200x200+500+517')
canvas_2 = Canvas(window2, width=200, height=200)
canvas_2.pack()
img2 = PhotoImage(file='img_heart_from_windows\yellow.png')
canvas_2.create_image(15, 10, anchor=NW, image=img2)
window3 = Toplevel()
window3.resizable(0, 0)
window3.geometry('200x200+300+317')
canvas_3 = Canvas(window3, width=200, height=200)
canvas_3.pack()
img3 = PhotoImage(file='img_heart_from_windows\yellow.png')
canvas_3.create_image(15, 10, anchor=NW, image=img3)
window11 = Toplevel()
window11.resizable(0, 0)
window11.geometry('200x200+900+617')
canvas_11 = Canvas(window11, width=200, height=200)
canvas_11.pack()
img11 = PhotoImage(file='img_heart_from_windows\ded.png')
canvas_11.create_image(18, 10, anchor=NW, image=img11)
window12 = Toplevel()
window12.resizable(0, 0)
window12.geometry('200x100+800+817')
canvas_12 = Canvas(window12, width=200, height=100)
canvas_12.pack()
img12 = PhotoImage(file='img_heart_from_windows\dblue1.png')
canvas_12.create_image(10, -30, anchor=NW, image=img12)
window1.after(2000, window1.destroy)
window1.mainloop()
window2.after(2000, window2.destroy)
window2.mainloop()
window3.after(2000, window3.destroy)
window3.mainloop()
window11.after(2000, window11.destroy)
window11.mainloop()
window12.after(2000, window12.destroy)
window12.mainloop()
check_file = os.path.exists('img_heart_from_windows')
if check_file != True:
os.mkdir('img_heart_from_windows')
for i in range(1, 13, 1):
with open(f'img_heart_from_windows\im{i}.png', 'wb') as img:
img.write(urlopen(url[i]).read())
main()
else:
main()
Ответы (1 шт):
Автор решения: Сергей Кох
→ Ссылка
Заготовка на три окна, добавите сколько надо по аналогии.
from tkinter import *
# списки для создания окон в нужном месте, с нужной картинкой, с нужным сдвигом по координатам
geometries = ('200x200+500+517', '200x200+300+317', '200x200+900+617')
files = ('heart1.png', 'heart2.png', 'heart3.png')
xy_image = ((15, 10), (15, 10), (18, 10))
hearts = []
i = 0
def main(i):
heart = Toplevel()
hearts.append(heart) # список экранов для их закрытия
heart.resizable(0, 0)
heart.geometry(geometries[i])
canvas_heart = Canvas(heart, width=200, height=200)
canvas_heart.pack()
img = PhotoImage(file=files[i])
canvas_heart.create_image(xy_image[i], anchor='nw', image=img)
i += 1
id_after = window.after(1000, main, i)
if i >= 3:
window.after_cancel(id_after)
window = Tk()
window.iconify()
main(i)
window.mainloop()