Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何获得PyQt方法的正确签名_Python_Python 3.x_Pyqt_Pyqt5_Inspect - Fatal编程技术网

Python 如何获得PyQt方法的正确签名

Python 如何获得PyQt方法的正确签名,python,python-3.x,pyqt,pyqt5,inspect,Python,Python 3.x,Pyqt,Pyqt5,Inspect,我试图使用inspect模块来确定方法的签名,我遇到了PyQt小部件的问题。小部件报告包含*args和**kwargs的签名,但不能使用任意关键字参数调用: >>> from PyQt5.QtWidgets import QWidget, QApplication >>> from inspect import signature >>> signature(QWidget.__init__) <Signature (self, /,

我试图使用
inspect
模块来确定方法的
签名
,我遇到了PyQt小部件的问题。小部件报告包含
*args
**kwargs
的签名,但不能使用任意关键字参数调用:

>>> from PyQt5.QtWidgets import QWidget, QApplication
>>> from inspect import signature
>>> signature(QWidget.__init__)
<Signature (self, /, *args, **kwargs)>
>>> app = QApplication([])
>>> QWidget(c=10)
TypeError: 'c' is an unknown keyword argument
显示以下工具提示:

以及:

自动完成覆盖的
\uuuuu init\uuuu
方法,以:

def __init__(self, parent: ,, flags: ,) -> None:
    super().__init__(parent=parent, flags=flags)

有没有办法在我的代码中获得PyQt5小部件方法的正确签名?

看来最简单的解决方法是使用文档字符串:

>>> QWidget.__doc__
'QWidget(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags())'
>>>
>>> QWidget.windowTitle.__doc__
'windowTitle(self) -> str'
我不确定VSCode的签名来自哪里。一些IDE(如PyCharm)用于代码完成和调用提示,但似乎表明VSCode可能还不能做到这一点

至于
inspect.signature
:强烈建议这不一定适用于扩展模块。它甚至不能与python内置程序一致工作:

>>> inspect.signature(list)
<Signature (iterable=(), /)>   
>>>
>>> inspect.signature(dict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.9/inspect.py", line 3130, in signature
    return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
  File "/usr/lib/python3.9/inspect.py", line 2879, in from_callable
    return _signature_from_callable(obj, sigcls=cls,
  File "/usr/lib/python3.9/inspect.py", line 2410, in _signature_from_callable
    raise ValueError(
ValueError: no signature found for builtin type <class 'dict'>
检查签名(列表) >>> >>>检查签名(dict) 回溯(最近一次呼叫最后一次): 文件“”,第1行,在 文件“/usr/lib/python3.9/inspect.py”,第3130行,签名 返回签名。from_callable(obj,follow_wrapped=follow_wrapped) 文件“/usr/lib/python3.9/inspect.py”,第2879行,fromu callable 从可调用(obj,sigcls=cls, 文件“/usr/lib/python3.9/inspect.py”,第2410行,在可调用的 升值误差( ValueError:未找到内置类型的签名
>>> QWidget.__doc__
'QWidget(parent: QWidget = None, flags: Union[Qt.WindowFlags, Qt.WindowType] = Qt.WindowFlags())'
>>>
>>> QWidget.windowTitle.__doc__
'windowTitle(self) -> str'
>>> inspect.signature(list)
<Signature (iterable=(), /)>   
>>>
>>> inspect.signature(dict)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.9/inspect.py", line 3130, in signature
    return Signature.from_callable(obj, follow_wrapped=follow_wrapped)
  File "/usr/lib/python3.9/inspect.py", line 2879, in from_callable
    return _signature_from_callable(obj, sigcls=cls,
  File "/usr/lib/python3.9/inspect.py", line 2410, in _signature_from_callable
    raise ValueError(
ValueError: no signature found for builtin type <class 'dict'>