繁体   English   中英

事件键与定义的不同

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM