Как можно закончить программу, используя анимированную гифку?

Как я могу создать новое окно с анимированной гифкой в программе на Python 3.12 с использованием Tkinter? В настоящее время при нажатии кнопки "Выход" ничего не происходит, и мне удалось вставить гифку только в главное окно, а не в созданное для этого специальное окно. Можете ли вы подсказать, как это исправить? 

Вот мой код: 
<pre><code class="python">import tkinter as tk
from PIL import Image, ImageTk

def open_second_window():
    # Создаем дочернее окно
    second_window = tk.Toplevel(root)
    second_window.title("Второе окно")
    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="ОДИН", 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="ДВА", 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="ЧЕТЫРЕ", 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="ТРИ", command=open_threetenfive_window)
    button1.place(x=688, y=352, anchor='ne')


    tk.Label(second_window, font='Times 30'
  • 28 сентября 2024 г. 16:43
Ответы на вопрос 2
Для того чтобы создать новое окно с анимированной гифкой в программе на Python с использованием Tkinter, вам нужно немного изменить ваш код. Я добавлю функцию для отображения гифки в новом окне и также изменю действие кнопки "Выход", чтобы при нажатии на кнопку "Выход" открывалось окно с анимированной гифкой. 

Вот пример, как это можно сделать:

```python
import tkinter as tk
from PIL import Image, ImageTk

def open_second_window():
    # Создаем дочернее окно
    second_window = tk.Toplevel(root)
    second_window.title("Второе окно")
    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)

    # Создаем кнопки
    button = tk.Button(second_window, height=4, width=12, font='Times 31', text="ОДИН", 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="ДВА", command=open_five_window)
    button1.place(x=688, y=82, anchor='ne')
    
    button3 = tk.Button(second_window, height=4, width=12, font='Times 31', text="ЧЕТЫРЕ", command=open_threee_window)
    button3.place(x=308, y=352, anchor='ne')
    
    button4 = tk.Button(second_window, height=4, width=12, font='Times 31', text="ТРИ", command=open_threetenfive_window)
    button4.place(x=688, y=352, anchor='ne')

    tk.Label(second_window, font='Times 30').pack()  # Пример метки (если нужно)

def open_exit_window():
    exit_window = tk.Toplevel(root)
    exit_window.title("Выход")
    
    # Загружаем анимированную гифку
    gif_path = "animation.gif"  # Замените на путь к вашей гифке
    gif_image = Image.open(gif_path)
    label = tk.Label(exit_window)
    label.pack()

    # Функция для обновления гифки
    def update_gif(frame):
        img = ImageTk.PhotoImage(gif_image.copy().convert("RGBA", frame))
        label.configure(image=img)
        label.image = img  # Сохраняем ссылку на изображение
        exit_window.after(100, update_gif, (frame + 1) % gif_image.n_frames)

    gif_image.seek(0)  # Перейти к первому кадру
    update_gif(0)

    # Кнопка для выхода
    exit_button = tk.Button(exit_window, text="Закрыть", command=exit_window.destroy)
    exit_button.pack(pady=10)

# Основное окно
root = tk.Tk()
root.title("Главное окно")

# Кнопка для открытия второго окна
second_window_button = tk.Button(root, text="Открыть второе окно", command=open_second_window)
second_window_button.pack(pady=20)

# Кнопка для выхода
exit_button = tk.Button(root, text="Выход", command=open_exit_window)
exit_button.pack(pady=20)

root.mainloop()
```

### Объяснение:
1. **Импорт библиотек**: Убедитесь, что у вас установлены библиотеки `tkinter` и `PIL`.
  
2. **Функция `open_exit_window`**: Эта функция открывает новое окно, где отображается анимированная гифка. Мы используем метод `update_gif`, чтобы обновлять кадр гифки.

3. **Кнопка "Выход"**: В главном окне добавлена кнопка "Выход", при нажатии на которую открывается новое окно с гифкой.

Замените `"animation.gif"` на путь к вашей анимированной гифке. Теперь, когда вы нажмете кнопку "Выход", откроется новое окно с гифкой.
У тебя в коде полно вызовов third_window.grab_set(), хотя а) никакого третьего окна ты не показал и б) даже в коде, который относится к дургим окнам. Копипаст подвел, или так задумано?
Похожие вопросы