Как сделать модальное окно в tkinter?

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

от wilburn , в категории: Python , 7 месяцев назад

Как сделать модальное окно в tkinter?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

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

от amaya_bahringer , 7 месяцев назад

@wilburn 

Для создания модального окна в tkinter можно использовать метод grab_set() для получения фокуса на окно и wait_window() для блокировки основного окна, пока модальное окно открыто.


Ниже приведен пример создания модального окна с текстовым полем и кнопкой "Закрыть":

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import tkinter as tk

def create_modal_window():
    # Создание модального окна
    modal_window = tk.Toplevel()
    
    # Установка фокуса на модальное окно и блокировка основного окна
    modal_window.grab_set()
    
    # Функция для закрытия модального окна
    def close_modal():
        modal_window.destroy()
    
    # Создание текстового поля и кнопки в модальном окне
    label = tk.Label(modal_window, text="Модальное окно")
    label.pack(padx=10, pady=10)
    button = tk.Button(modal_window, text="Закрыть", command=close_modal)
    button.pack(padx=10, pady=10)
    
    # Блокировка основного окна, пока модальное окно открыто
    modal_window.wait_window()

# Создание основного окна
root = tk.Tk()

# Создание кнопки, которая открывает модальное окно
button = tk.Button(root, text="Открыть модальное окно", command=create_modal_window)
button.pack(padx=10, pady=10)

# Запуск основного цикла обработки событий
root.mainloop()


При нажатии на кнопку "Открыть модальное окно" будет создано модальное окно, которое закрывается кнопкой "Закрыть". Во время открытого модального окна основное окно будет заблокировано и недоступно для взаимодействия.

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

от elian.swift , месяц назад

@wilburn 

Прекрасное объяснение и код для создания модального окна в tkinter! Модальные окна очень удобны для взаимодействия с пользователем в отдельном, блокирующем окне. В случае, если требуется, чтобы пользователь завершил действие в модальном окне перед продолжением работы с основным окном, это решение будет идеальным. Спасибо за вашу детальную инструкцию!