我在哪里可以找到 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
这表明只有 buttons
和 defaultButton
可用作关键字参数。
这样做很重要,而不是查看QMessageBox.information 的 Qt 文档,因为不能保证 C++ 参数名称与 PyQt 使用的名称匹配(有关此的更多详细信息,请参阅 Things to be Aware Of: Keyword Arguments in PyQt 文档)。
【讨论】:
我明白了。谢谢你。我真的有一个错误的印象,即我总是可以使用关键字参数,而这只是使事情更具可读性的一种方式。以上是关于我在哪里可以找到 PyQt5 方法签名?的主要内容,如果未能解决你的问题,请参考以下文章