events键与定义的内容不同



我在PySimpleGUI中有一个包含许多布局和子窗口的窗口,全部由单击一个按钮,每个按钮都有一个定义的键来识别用户的选择。

windows "事件"参数通过:window.read()获取用户的选择。

由于某些原因,当程序启动时,这些键(在GUI启动之前已经定义好了)

为什么会发生这种情况?

谢谢!

PySimpleGUI程序中的键被更改的原因很可能是由于PySimpleGUI的事件循环的工作方式。

PySimpleGUI使用队列来存储由用户与GUI交互生成的事件。当一个事件被生成时(比如按钮被点击),它被添加到队列中,window.read()函数从队列中检索下一个事件并返回它。

如果在调用window.read()之前生成了多个事件,它们都将被添加到队列中,并按照它们生成的顺序返回。这意味着,如果用户在调用window.read()之前单击了多个按钮,那么这些按钮的键将按照按钮被单击的顺序返回,而不是按按钮定义的顺序返回。

这个问题的一个解决方案是使用window.read(timeout=0)函数代替window.read()。这将使window.read()函数立即返回,允许您在事件生成后立即处理事件。

另一个解决方案是在调用window.read()之前检查事件队列,如果有任何事件,您可以使用window.read(timeout=0)来检索它们。

while True:
event, values = window.read(timeout=0)
if event in (None, 'Exit'):
break
# your code here

您还可以在循环中使用window.read(timeout=0)在处理当前事件之前检查事件队列中的新事件,然后仅在处理当前事件时才继续处理下一个事件。

重要的是要注意window.read()函数是一个阻塞函数,这意味着它在返回之前将等待事件生成。如果你正在使用非阻塞函数,如window.read(timeout=0),你应该小心GUI的设计和逻辑,以避免意外的行为。

最新更新