Принудительное наложение окна PySimpleGUI

#python #popupwindow #pysimplegui

#python #всплывающее окно #pysimplegui

Вопрос:

Я просто хочу, чтобы, если кто-то попытается закрыть окно графического интерфейса с помощью кнопки закрытия вместо нажатия «ОК», окно появится снова… Простыми словами, они не могут закрыть это или получить доступ к любому другому окну, не нажав «ОК».

 import PySimpleGUI as sg

layout = [[sg.Text("Click OK to start the unlock process using Face Verification")], 
          [sg.Button("OK")]]

# Create the window
window = sg.Window("Demo", layout)

# Create an event loop
while True:
    event, values = window.read()
    # End program if user closes window or
    # presses the OK button
    if event == "OK" or event == sg.WIN_CLOSED:
        break

window.close()
 

Ответ №1:

Это определено в исходном коде PySimpleGUI. Вы можете изменить его, чтобы сгенерировать событие «WIN_CLOSE», например

 import PySimpleGUI as sg

layout = [[sg.Text("Click OK to start the unlock process using Face Verification")], [sg.Button("OK")]]
window = sg.Window("Title", layout, finalize=True)

window.TKroot.protocol("WM_DESTROY_WINDOW", lambda:window.write_event_value("WIN_CLOSE", ()))
window.TKroot.protocol("WM_DELETE_WINDOW",  lambda:window.write_event_value("WIN_CLOSE", ()))

while True:
    event, values = window.read()
    print(event)
    if event in ("OK", sg.WIN_CLOSED):
        break
    elif event == "WIN_CLOSE":
        print("Close Button 'X' clicked !")

window.close()
 
 WIN_CLOSE
Close Button 'X' clicked !
WIN_CLOSE
Close Button 'X' clicked !
WIN_CLOSE
Close Button 'X' clicked !
OK
 

Комментарии:

1. 2 января выпущена новая функция, которая позволяет делать это без прямого вызова tkinter . Установите enable_close_attempted_event при создании окна. Событие WINDOW_CLOSE_ATTEMPTED_EVENT будет возвращено из window.read(), если щелкнуть «X» или окно будет уничтожено.