为什么我要双击才能实际执行操作?

3

代码:

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()
    window.read()
    if event == 'White':
        window['Input'].update(background_color='white')
    if event == 'Black':
        window['Input'].update(background_color='black')

我已经实现了当你按下按钮时,输入框的颜色会改变。

但是为什么我必须按两次按钮才能真正改变它的颜色呢?


每次调用window.read()后,我总是会加上print(event, values)。这样可以找到双重读取的问题,同时也能让我知道可能发生的事件等等。对于PSG程序来说,这是一种非常有效的调试技巧。 - Mike from PSG
1个回答

3

您的事件循环会读取事件两次:

while True:
    event, values = window.read()
    window.read()

你只需要使用它一次。

此外,你应该添加一个退出事件。

更新后的代码:

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

好的,谢谢! 我找到了我的代码中读取窗口两次的地方,并进行了修复。 - Eskimo868

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接