【问题标题】:Force overlay a PySimpleGUI window强制覆盖 PySimpleGUI 窗口
【发布时间】:2021-01-02 18:33:24
【问题描述】:

我只是希望如果有人尝试使用关闭按钮而不是单击“确定”来关闭 GUI 窗口,该窗口会重新出现...简单地说,如果不单击“确定”,他们将无法关闭此窗口或访问任何其他窗口.

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()

【问题讨论】:

    标签: python popupwindow pysimplegui


    【解决方案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。如果单击“X”或窗口被破坏,window.read() 将返回事件 WINDOW_CLOSE_ATTEMPTED_EVENT。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多