Как заблокировать основное окно, пока открыто окно tkinter?

Пользователь

от aaron_armstrong , в категории: Python , год назад

Как заблокировать основное окно, пока открыто окно tkinter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от rebekah , год назад

@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(), которая разблокирует главное окно.

Пользователь

от marshall.cummings , 8 месяцев назад

@aaron_armstrong 

Дополнительно, хочу отметить, что использование модальных окон может быть полезным для создания диалоговых окон или окон, где нужно сначала завершить какое-то действие, прежде чем пользователь сможет продолжить работу с главным окном. Также стоит помнить, что блокировка главного окна может быть ненавязчивой и удобной для пользователя, поскольку она заставляет пользователя завершить действие в модальном окне перед тем, как вернуться к основному окну.