pyside - 有没有办法获取事件循环中每个事件的日志信息?

时间:2014-03-21 02:28:25

标签: events logging pyside event-loop qeventloop

我正在使用PySide开发一个应用程序,我想知道是否有一种方法可以记录哪些事件进入主事件循环以及哪些事件离开。我的应用程序使用无线程,它是完全异步的,但我想要有事件循环的日志注册表以进行调试。我使用logging作为我的日志工具(duh)。

Pax et bonum。

1 个答案:

答案 0 :(得分:0)

作为一个好user on reddit replies

检查出来:http://qt-project.org/doc/qt-4.8/qcoreapplication.html#notify。事件循环在QCoreApplication中实现,因此您可以子类化并安装自己的代码来检查事件。

类应用程序(QApplication):     events = {constant:name for name,constant in QEvent。 dict .items()               如果name [0] .isupper()和isinstance(constant,int)}

def notify(self, obj, event):
    print("{:<20}{}".format(Application.events[event.type()], obj))
    return super().notify(obj, event)

效果很好。 http://i.imgur.com/mMLqQ5Y.png

当然,您仍然需要确定正在消耗哪些事件。该超级调用返回TrueFalse,但几乎我看到的每个事件都返回True。你可能不得不遍历对象关系或其他东西 - 我不确定,因为我没有这样做,但似乎有很好的支持,可以进入循环并做你喜欢的事情。


但是,我更倾向于遵循Qt's documentation上列出的第三个选项:

  

3。在QCoreApplication::instance()上安装事件过滤器。这样的事件过滤器能够处理所有小部件的所有事件,因此它与重新实现notify()一样强大;此外,可以有多个应用程序全局事件过滤器。全局事件过滤器甚至可以查看已禁用小组件的鼠标事件。请注意,仅为主线程中的对象调用应用程序事件过滤器。