检查 PyQt/PySide 方法签名

Check PyQt/PySide method signature

QWidget (PySide) constructor accepts f keyword, but QWizardflags 参数而不是 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)