【问题标题】:PyQt4 @pyqtSlot: what is the result kwarg for?PyQt4 @pyqtSlot:kwarg 的结果是什么?
【发布时间】:2012-06-30 09:15:41
【问题描述】:

通过阅读this,提出了两个问题:

1。 它说

有时需要将 Python 方法显式标记为 一个Qt插槽

虽然我总是使用 @pyqtSlot 装饰器,因为它说:

将信号连接到修饰的 Python 方法也有 减少内存使用量的优势,速度稍快

我问自己:在哪些具体情况下是必要的? 并且:不使用@pyqtSlot 装饰器有什么好处吗?

2。 result关键字参数,它的作用是什么?

@pyqtSlot(int, result=int)
def foo(self, arg1):
    """ C++: int foo(int) """

它看起来像返回值的类型,但 AFAIK 在发出信号时无法检索返回值。

对此有什么想法吗?

【问题讨论】:

    标签: python pyqt pyqt4 signals-slots


    【解决方案1】:
    1. 由于 PyQt 架构,它更快。 PyQt 将 python 插槽转换为 C++ 插槽,以便与 Qt 框架进行通信。当您将 Python 方法显式标记为 Qt 插槽并为其提供 C++ 签名时,PyQt 代码不必猜测 C++ 签名本身,因为它已经指定。这可能会提高大型项目的性能。

    2. 仅当您想将插槽作为普通函数调用时才需要返回值。

    编辑:似乎QMetaObject.invokeMethod 方法执行了一个槽并使用它的返回值。

    【讨论】:

    • 有道理,谢谢!所以我想不使用装饰器没有任何好处,即 ?
    • 在频繁使用的插槽上使用它。如果它是一个基本的插槽,它不会做很多事情并且没有被调用太多,那么在装饰器中就不需要了。它稍微增强了脚本,但在简单的函数上不会很明显。
    • 好的,所以我想说,总是使用它,因为它增强了代码的可读性(带有语法高亮)
    • 关于result= kwd arg 的注释:如果您的插槽返回值,PyQt D-Bus 绑定是必需的。因此,对于您想通过 D-Bus 公开的函数,该函数接受一个字符串并返回一个 int,您可以使用pyqtSlot(str, result=int) 装饰该函数。如果不包含result=int,则通过 D-Bus 的调用将不会返回值。我之所以提到它,是因为我最近花了很多时间调试这个问题(参见stackoverflow.com/questions/11731709/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-20
    • 1970-01-01
    相关资源
    最近更新 更多