在你的代码中,窗口运行时间久的原因是因为你的循环在执行的过程中阻塞了窗口的事件处理,导致窗口无法及时响应关闭事件。为了优化窗口的关闭速度,你可以采取以下方法:
1. 将长时间执行的任务放在后台线程中进行:可以使用threading模块将长时间执行的任务放在一个独立的线程中运行,这样窗口就可以在主线程中继续响应事件和关闭。示例代码如下:import threadingimport PySimpleGUI as sgdef long_running_task(): for i in range(10000000000): a = 1layout = [ [sg.T('月份:'), sg.In('2023-05')], [sg.T('路径1:'), sg.FolderBrowse()], [sg.T('路径2:'), sg.FolderBrowse()], [sg.B('确认'), sg.B('取消')] ]window = sg.Window('核对', layout, keep_on_top=True)while True: event, value = window.read() if event in (None, '取消'): break if event == '确认': month = value[0] p_backend = value['Browse'] p_erp = value['Browse0'] # 在后台线程中执行长时间任务 thread = threading.Thread(target=long_running_task) thread.start() breakwindow.close()
2. 使用window.finalize()方法尽快显示窗口并释放控制权:在你的代码中,调用window.finalize()方法可以尽快显示窗口并释放控制权,以便让窗口能够响应关闭事件。示例修改代码如下:import PySimpleGUI as sglayout = [ [sg.T('月份:'), sg.In('2023-05')], [sg.T('路径1:'), sg.FolderBrowse()], [sg.T('路径2:'), sg.FolderBrowse()], [sg.B('确认'), sg.B('取消')] ]window = sg.Window('核对', layout, keep_on_top=True)window.finalize() # 尽快显示窗口并释放控制权while True: event, value = window.read() if event in (None, '取消'): break if event == '确认': month = value[0] p_backend = value['Browse'] p_erp = value['Browse0'] for i in range(10000000000): a = 1 breakwindow.close()
通过上述优化方式,你可以提高窗口的响应速度和关闭速度。希望对你有帮助!如果还有其他问题,请随时提问。
如果回答对你有帮助,请给我一个最佳答案!
|