【问题标题】:Why do I have to double click to actually do something?为什么我必须双击才能真正做某事?
【发布时间】:2021-09-25 13:09:04
【问题描述】:

代码:

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 程序来说,这是一种非常有效的调试技术。

标签: python python-3.x pysimplegui


【解决方案1】:

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

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

【讨论】:

  • 好的,谢谢!我在代码中找到了两次读取窗口的位置并修复了它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2013-10-03
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
相关资源
最近更新 更多