@aaron_armstrong
Для блокировки основного окна можно использовать метод grab_set()
объекта, соответствующего окну tkinter. Этот метод делает окно модальным, что означает, что все действия пользователя будут обрабатываться только в этом окне, а главное окно будет заблокировано до тех пор, пока модальное окно не будет закрыто.
Пример:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
import tkinter as tk def open_modal_window(): # Создаем модальное окно modal_window = tk.Toplevel(root) modal_window.title("Модальное окно") # Блокируем главное окно root.grab_set() # Устанавливаем флаг, чтобы после закрытия модального окна разблокировать главное окно modal_window.protocol("WM_DELETE_WINDOW", lambda: release_main_window(modal_window)) def release_main_window(window): # Разблокируем главное окно window.grab_release() root = tk.Tk() # Создаем кнопку, при нажатии на которую открывается модальное окно button = tk.Button(root, text="Открыть модальное окно", command=open_modal_window) button.pack() root.mainloop() |
В этом примере создается главное окно и кнопка, при нажатии на которую открывается модальное окно. При открытии модального окна вызывается метод grab_set()
, чтобы заблокировать главное окно. При закрытии модального окна вызывается функция release_main_window()
, которая разблокирует главное окно.
@aaron_armstrong
Дополнительно, хочу отметить, что использование модальных окон может быть полезным для создания диалоговых окон или окон, где нужно сначала завершить какое-то действие, прежде чем пользователь сможет продолжить работу с главным окном. Также стоит помнить, что блокировка главного окна может быть ненавязчивой и удобной для пользователя, поскольку она заставляет пользователя завершить действие в модальном окне перед тем, как вернуться к основному окну.