[英]events key is changing from what was defined
我在 PySimpleGUI 中有一个 window,它包含许多布局和子窗口,所有布局和子窗口都是通过单击按钮启动的,每个都有一个定义的键来识别用户的选择。
windows“事件”参数通过以下方式获得用户选择:window.read()。
出于某种原因,当程序启动时,这些键(在 GUI 启动之前已明确定义)会被添加到其原始值的数字更改。
为什么会这样?
谢谢!
PySimpleGUI 程序中的键被更改的原因可能是由于 PySimpleGUI 的事件循环的工作方式。
PySimpleGUI 使用队列来存储用户与 GUI 交互时生成的事件。 当一个事件产生时(例如按钮点击),它被添加到队列中,然后 window.read() function 从队列中检索下一个事件并返回它。
如果在调用 window.read() 之前生成了多个事件,它们将全部添加到队列中并按照它们生成的顺序返回。 这意味着如果用户在调用 window.read() 之前单击了多个按钮,则这些按钮的键将按照按钮被单击的顺序返回,而不是按钮定义的顺序。
此问题的一种解决方案是使用 window.read(timeout=0) function 而不是 window.read()。 这将使 window.read() function 立即返回,允许您在事件生成后立即进行处理。
另一种解决方案是在调用 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() function 是一个阻塞的 function,这意味着它会等待一个事件生成,然后再返回。 如果您使用的是非阻塞 function,例如 window.read(timeout=0),您应该小心 GUI 和逻辑的设计,以避免意外行为。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.