[Python] problem with insert GIF in python(TKinter)?

Discussão em 'Python' iniciado por Stack, Setembro 25, 2024.

  1. Stack

    Stack Membro Participativo

    How to make it so that the gif was not in the main window (menu, greeting), but in the final window . I was able to insert a gif in the beginning of the program, but in the final window did not work, how to make the final with a gif, if I have this code :

    import tkinter as tk
    from PIL import Image, ImageTk

    def open_second_window():
    second_window = tk.Toplevel(root)
    second_window.title("SECOND")
    second_window.state('zoomed')

    image_path = "1.jpg"
    image = Image.open(image_path)
    photo = ImageTk.PhotoImage(image)


    label = tk.Label(second_window, image=photo)
    label.image = photo
    label.pack(fill=tk.BOTH, expand=True)
    label.place(x=770, y=0)

    button = tk.Button(second_window,height=4, width=12, font='Times 31', text="ONE", command=lambda: open_four_window(second_window))

    button.place(x=308, y=82, anchor='ne')
    button1 = tk.Button(second_window,height=4, width=12, font='Times 31', wraplength=289, text="TWO", command=open_five_window)
    button1.place(x=688, y=82, anchor='ne')
    button = tk.Button(second_window,height=4, width=12, font='Times 31', text="THREE", command=open_threee_window)
    button.place(x=308, y=352, anchor='ne')
    button1 = tk.Button(second_window,height=4, width=12, font='Times 31', text="FOUR", command=open_threetenfive_window)
    button1.place(x=688, y=352, anchor='ne')


    tk.Label(second_window, font='Times 30', text="TEXT", fg="red").place(x=150, y=30)


    third_window.grab_set()
    def open_four_window(second_window):

    second_window.destroy()

    four_window = tk.Toplevel(root)
    four_window.title("THREE")
    four_window.state('zoomed')

    image_path = "2.jpg"
    image = Image.open(image_path)
    photo = ImageTk.PhotoImage(image)

    label = tk.Label(four_window, image=photo)
    label.image = photo
    label.pack(fill=tk.BOTH, expand=True)
    label.place(x=0, y=0)


    button = tk.Button(four_window,height=1, width=33, font='Times 31', text="START", command=lambda: open_second_window())
    button.place(x=768, y=720, anchor='ne')
    button1 = tk.Button(four_window,height=1, width=33, font='Times 31', text="EXIT", command=animation)
    button1.place(x=1536, y=720, anchor='ne')



    third_window.grab_set()


    ...

    def open_theend_window():
    # Создаем дочернее окно
    theend_window = tk.Toplevel(root)
    theend_window.title("Второе окно")
    theend_window.state('zoomed')

    photo = tkinter.PhotoImage(file = 'road-sign-roadtrip.gif')
    lbl = tkinter.Label(theend_window ,image = photo)
    lbl.image = photo #keeping a reference in this line
    lbl.grid(row=0, column=0)

    # Создаем метку для отображения изображения

    # Сохраняем ссылку на изображение



    # Создаем кнопку
    button = tk.Button(theend_window,height=1, width=33, font='Times 31', text="В начало", command=lambda: open_second_window())
    button.place(x=768, y=720, anchor='ne')
    button1 = tk.Button(theend_window,height=1, width=33, font='Times 31', text="Выход", command=Close)
    button1.place(x=1536, y=720, anchor='ne')



    # Устанавливаем режим grab_set()
    third_window.grab_set()






    5# Создаем главное окно
    root = tk.Tk()
    root.title("Главное окно")
    root.state('zoomed')


    # Загружаем изображение 001.jpg
    image_path = "40.jpg"
    image = Image.open(image_path)
    photo = ImageTk.PhotoImage(image)
    image.thumbnail((1, 1))

    # Создаем метку для отображения изображения
    label = tk.Label(root, image=photo)
    label.pack(fill=tk.BOTH, expand=True)
    label.place(x=-3, y=0)

    def Close():
    root.destroy()

    # Создаем кнопку "Далее"
    button = tk.Button(root,height=1, width=33, font='Times 31', text="NEXT", command=lambda: open_second_window())
    button.place(x=768, y=720, anchor='ne')
    button1 = tk.Button(root,height=1, width=33, font='Times 31', text="EXIT", command=Close)
    button1.place(x=1536, y=720, anchor='ne')


    tk.Label(root, font='Times 30', text="TEXT", fg="red").pack(padx=30, pady=30)
    tk.Label(root, font='Times 30 italic', text="DESCRIPTION").place(x=600, y=77)

    file = "road-sign-roadtrip.gif"
    info = Image.open(file)

    frames = info.n_frames # number of frames

    photoimage_objects = []
    for i in range(frames):
    obj = tk.PhotoImage(file=file, format=f"gif -index {i}")
    photoimage_objects.append(obj)


    def animation(current_frame=0):
    global loop
    image = photoimage_objects[current_frame]

    gif_label.configure(image=image)
    current_frame = current_frame + 1

    if current_frame == frames:
    current_frame = 0

    loop = root.after(50, lambda: animation(current_frame))

    gif_label = tk.Label(root, image="")
    gif_label.pack()

    root.mainloop()


    I made only the ability to play a GIF, but only in the main window, and I need to be in the final window. In my program is quite a lot of functions (windows) and I did not write them, as it works.

    Continue reading...

Compartilhe esta Página