Проверьте подпись метода PyQt / PySide - PullRequest
0 голосов
/ 06 июня 2019

QWidget (PySide) конструктор принимает ключевое слово f, но QWizard имеет аргумент flags вместо f.Можно ли заранее проверить подпись метода?Я хочу иметь возможность передавать флаги любому подклассу QWidget.

1 Ответ

0 голосов
/ 07 июня 2019

Как вы упомянули QWidget принимает f, а QDialog также принимает f. QWizard представляется нечетным, использующим flags.Так как 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)
...