检查 PyQt/PySide 方法签名
Check PyQt/PySide method signature
QWidget (PySide) constructor accepts f
keyword, but QWizard 有 flags
参数而不是 f
。是否可以事先检查方法签名?我希望能够将标志传递给任何 QWidget 子类。
正如您提到的 QWidget accepts f
, and QDialog also accepts f
. QWizard appears to be the odd one out that uses flags
. Since inspect.getfullargspec() 不适用于 PySide 对象,如果您需要在 运行 时确定它,我建议您制作一个辅助函数。助手将必须根据已知的小部件列表 类 来确定是使用 f 还是 flags 关键字参数。
from PySide2 import QtWidgets
FLAGS_WIDGETS = (QtWidgets.QWizard,)
def flags_kwarg(cls, flags):
if issubclass(cls, FLAGS_WIDGETS):
key = 'flags'
else:
key = 'f'
return {key: flags}
这可以用作:
from PySide2 import QtCore
cls = QtWidgets.QWizard # or some other widget class
flags = QtCore.Qt.WindowFlags()
kwargs = flags_kwarg(cls, flags)
widget = cls(parent, **kwargs)
QWidget (PySide) constructor accepts f
keyword, but QWizard 有 flags
参数而不是 f
。是否可以事先检查方法签名?我希望能够将标志传递给任何 QWidget 子类。
正如您提到的 QWidget accepts f
, and QDialog also accepts f
. QWizard appears to be the odd one out that uses flags
. Since inspect.getfullargspec() 不适用于 PySide 对象,如果您需要在 运行 时确定它,我建议您制作一个辅助函数。助手将必须根据已知的小部件列表 类 来确定是使用 f 还是 flags 关键字参数。
from PySide2 import QtWidgets
FLAGS_WIDGETS = (QtWidgets.QWizard,)
def flags_kwarg(cls, flags):
if issubclass(cls, FLAGS_WIDGETS):
key = 'flags'
else:
key = 'f'
return {key: flags}
这可以用作:
from PySide2 import QtCore
cls = QtWidgets.QWizard # or some other widget class
flags = QtCore.Qt.WindowFlags()
kwargs = flags_kwarg(cls, flags)
widget = cls(parent, **kwargs)