【发布时间】:2012-07-09 16:43:23
【问题描述】:
在 wxpython 中,是通过为每个事件处理程序创建一个单独的函数(例如为每次单击按钮创建一个单独的函数)来处理事件更好,还是创建一个大的 button_handler,然后确定从那里单击的按钮?
基本上,我想知道为每个单独的事物监视许多不同的事件是否会占用更多资源,或者只是一个大事件会确定在触发时单击了哪个事件。
【问题讨论】:
标签: python events wxpython wxwidgets
在 wxpython 中,是通过为每个事件处理程序创建一个单独的函数(例如为每次单击按钮创建一个单独的函数)来处理事件更好,还是创建一个大的 button_handler,然后确定从那里单击的按钮?
基本上,我想知道为每个单独的事物监视许多不同的事件是否会占用更多资源,或者只是一个大事件会确定在触发时单击了哪个事件。
【问题讨论】:
标签: python events wxpython wxwidgets
别担心。这两种方案所需的资源都是微不足道的,尤其是在 python 脚本中。专注于以易于理解和维护的方式设计代码。
【讨论】:
资源强度在这里不是您的问题,但您肯定希望为此使用一个大事件循环。由于全局解释器锁,python 中的许多事件处理程序都有处理事件队列的烦人方式,并且在某些事件处理程序中,如果不将其从堆栈中删除(例如 VPython)甚至可能无法检查事件,等等在这些情况下,如果您在代码中使用多项检查,您很可能会遇到奇怪且难以跟踪的错误。如果您使用一项大型活动,则不会发生这种情况,或者如果发生这种情况,追踪起来会容易得多。
Ravenspoint 是正确的,因为这两种方法的资源强度都是微不足道的,仅基于资源强度你不应该担心它,但是单个事件循环更容易维护。
【讨论】:
如果我有三个按钮做的事情完全不同,那么我需要为它们提供不同的事件处理程序,因为我发现这样更容易调试。如果它们都是应用了略微不同格式选项的打印按钮,那么我会将它们全部连接到同一个处理程序并使用 event.GetEventObject() 来确定调用了哪个。我有几次由同一个处理程序处理多个事件是当我有一个工具栏按钮和一个菜单项都调用相同的东西时。它更多地与程序流程和易于调试有关,而这只是随着实践而来的。
【讨论】: