我在哪里可以找到 PyQt5 方法签名?

Posted

技术标签:

【中文标题】我在哪里可以找到 PyQt5 方法签名?【英文标题】:Where can I find PyQt5 Method Signatures? 【发布时间】:2014-12-14 13:42:21 【问题描述】:

我想编写一个带有图形用户界面的小应用程序,为此我安装了 PyQt5。在教程中,我发现 QMessageBox.information(....) 调用已完成。

我想改变通话,而不是:

QMessageBox.information(self, "Empty Field", "Please enter a name and address.")

我写关键字参数,是为了让我知道哪个参数代表什么内容,这样,当我一年读到它的时候,我马上就知道它是关于什么的。所以我尝试了:

QMessageBox.information(parent=self, title="Empty Field", message="Please enter a name and address.")

在执行时给我以下错误:

Traceback (most recent call last):
File "SimpleExample.py", line 39, in submitContact
QMessageBox.information(parent=self, title="Empty Field", message="Please enter a name and address.")
TypeError: QMessageBox.information(QWidget, str, str, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton): 'message' is not a valid keyword argument

所以我的猜测是错误的,但我如何找出真正的方法签名? 找了一阵子,找到了这个功能:

from inspect import getcallargs
getcallargs()

我试过这样使用它:

>>> from inspect import getcallargs
>>> from PyQt5.QtWidgets import *
>>> from PyQt5.QtCore import *
>>> getcallargs(QMessageBox.information(), a=1, b=2)

但这也行不通:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: QMessageBox.information(QWidget, str, str, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton): not enough arguments

无论我添加多少参数(函数 1、2、3、4、5、6、7、8,...),它都永远不会有足够的参数。如果是在讨论 information() 的参数,那么我应该如何找到我想要为其获取参数的函数的正确数量的参数?!

所以我想“好吧,让我们试试看能否在 Qt5 文档中找到该方法。”但是当然,我只被重定向到 Qt5 的 c++ 文档,并且没有为 QMessageBox 列出函数“information()”,所以我仍然不知道关键字的名称。

我怎样才能知道这些名字?

【问题讨论】:

【参考方案1】:

在 PyQt 中,关键字参数仅支持 可选 参数,因此您不能将它们用作记录函数签名的一般方式。

获得正确方法签名的快速方法是在 python 交互式会话中使用 help 函数:

>>> from PyQt5 import Qt
>>> help(Qt.QMessageBox.information)
...

Help on built-in function information:

information(...)
    QMessageBox.information(QWidget, str, str, QMessageBox.StandardButtons buttons=QMessageBox.Ok, QMessageBox.StandardButton defaultButton=QMessageBox.NoButton) -> QMessageBox.StandardButton

这表明只有 buttonsdefaultButton 可用作关键字参数。

这样做很重要,而不是查看QMessageBox.​information 的 Qt 文档,因为不能保证 C++ 参数名称与 PyQt 使用的名称匹配(有关此的更多详细信息,请参阅 Things to be Aware Of: Keyword Arguments in PyQt 文档)。

【讨论】:

我明白了。谢谢你。我真的有一个错误的印象,即我总是可以使用关键字参数,而这只是使事情更具可读性的一种方式。

以上是关于我在哪里可以找到 PyQt5 方法签名?的主要内容,如果未能解决你的问题,请参考以下文章

Auth0 - 我在哪里可以获得 JWT 签名密钥

通过区块浏览器在哪里获得智能合约交互的签名?

手机里的证书在哪里可以找到???

Python需要disconnect信号吗

win7电脑安装软件,IE浏览器提示禁止安装无效签名怎么办

适用于未签名小程序的默认 Java 策略文件在哪里?