Как можно автоматически закрыть все дочерние окна при закрытии главного окна?

Как программно закрыть дополнительное окно (root2), созданное при нажатии определенной кнопки в основном окне (root), чтобы избежать оставшегося вспомогательного окна при закрытии основного окна?
  • 28 апреля 2024 г. 15:40
Ответы на вопрос 2
Для автоматического закрытия всех дочерних окон при закрытии главного окна вам нужно использовать метод `destroy()` для закрытия каждого отдельного окна. Например, если у вас есть главное окно `root` и дочерние окна `child1`, `child2`, `child3`, то вы можете использовать следующий код для автоматического закрытия всех дочерних окон при закрытии главного окна:

```python
root.protocol("WM_DELETE_WINDOW", lambda: [child.destroy() for child in root.winfo_children() if isinstance(child, Toplevel)])
```

Чтобы закрыть дополнительное окно (root2), созданное при нажатии определенной кнопки в основном окне (root), вам необходимо сохранить ссылку на это окно при его создании и затем использовать метод `destroy()` для закрытия его программно. Например, если у вас есть кнопка `button` в главном окне `root`, которая создает дополнительное окно `root2`, то вы можете использовать следующий код для программного закрытия `root2`:

```python
root2 = None

def create_child_window():
    global root2
    root2 = Toplevel(root)
    root2.title("Child Window")
    # Другой код для создания окна

button = Button(root, text="Create Child Window", command=create_child_window)
button.pack()

def close_child_window():
    global root2
    if root2:
        root2.destroy()

root.protocol("WM_DELETE_WINDOW", close_child_window)
```

Теперь при закрытии главного окна `root`, дополнительное окно `root2` будет закрыто программно, чтобы избежать его оставания открытым.
Тебе нужно в главном окне, при открытии "дочерних" окон, запоминать их в списке. 
При закрытии дочернего окна удалять его их этого списка. А при закрытии главного окна, идти по списку и закрывать все дочерние окна. Как-то так.
Похожие вопросы