You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PySimpleGUI技术疑问:为何事件循环中无法检测窗口关闭事件?

问题原因及解决办法

你的代码不是不能存在多个事件检查,而是处理逻辑有两个关键问题:

  1. 执行window.close()后没有终止while循环,下一次调用window.read()时,窗口已经关闭,会直接抛出异常,导致程序崩溃,看起来像是关闭事件没生效。
  2. 没处理Quit按钮的事件,点击Quit也不会触发窗口关闭。

另外,event == None是旧版本PySimpleGUI的写法,新版本里关闭窗口的事件统一用sg.WINDOW_CLOSED,可以不用再判断None。

修正后的代码

import PySimpleGUI as sg
# Define the window's contents
layout = [[sg.Text("What's your name?")],
          [sg.Input(key='-INPUT-')],
          [sg.Text(size=(40,1), key='-OUTPUT-')],
          [sg.Button('Ok'), sg.Button('Quit')]]

# Create the window
window = sg.Window('Window Title', layout)

# Display and interact with the Window using an Event Loop
while True:
    event, values = window.read()
    # 先处理退出类事件:关闭窗口或点击Quit
    if event == sg.WINDOW_CLOSED or event == 'Quit':
        print(event)
        break  # 终止循环,避免后续执行window.read()
    # 再处理Ok按钮事件
    if event == 'Ok':
        print(event)
        window['-OUTPUT-'].update('Hello ' + values['-INPUT-'] + "!")

# 循环结束后统一关闭窗口
window.close()

关键修改点

  • 把退出类事件的判断放在前面,触发后用break终止while循环,避免窗口关闭后仍执行window.read()引发异常
  • 将窗口关闭操作移到循环外面,统一处理,逻辑更清晰
  • 新增Quit按钮的事件处理,匹配界面设计逻辑
  • 去掉冗余的event == None判断,适配新版本PySimpleGUI

内容的提问来源于stack exchange,提问作者Kurt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:42:34