PySimpleGUI按钮需双击才生效:为何点击两次才能修改输入框背景色?
问题原因
你代码的问题出在事件循环里重复调用了两次window.read(),逻辑流程如下:
- 程序进入循环后,第一次执行
window.read(),此时你第一次点击按钮,这个方法会返回对应的按钮事件并赋值给event变量 - 紧接着代码又执行了第二次
window.read(),程序会直接阻塞在这里等待新的交互,你第一次点击的事件已经被读取但还没执行判断逻辑,程序就停在等你第二次操作的状态 - 你第二次点击按钮后,第二次
window.read()才返回,这时候程序才会走到后续的事件判断逻辑,用的是第一次点击时拿到的event值执行颜色修改,所以看起来要点击两次才生效
修正方案
删除多余的那一行window.read()即可,建议同时补充窗口关闭事件的处理,避免点击窗口关闭按钮时报错,修正后的代码如下:
import PySimpleGUI as sg layout = [ [sg.Input(s=(26, 1), background_color='red', k='Input')], [sg.Button('White', s=(10, 1)), sg.Button('Black', s=(10, 1))], ] window = sg.Window('test', layout=layout, margins=(1, 1)) while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event == 'White': window['Input'].update(background_color='white') if event == 'Black': window['Input'].update(background_color='black') window.close()
内容的提问来源于stack exchange,提问作者Eskimo868
相关产品推荐
相关产品推荐

