Напротив, это ошибка PySide2, поскольку она противоречит документам :
Множественное наследование Требует, чтобы QObject был первым
Если вы используете множественное наследование, moc предполагает, что первый унаследованный класс является подклассом QObject.Кроме того, убедитесь, что только первый унаследованный класс является объектом QObject.
Если рассматривается поведение, описанное в предыдущей части, то класс Dialog должен учитывать только UserForm, а не QDialog, поэтому Dialog не долженесть метод exec_ (), поскольку его могут иметь только классы, наследуемые от QDialog.
В Qt вам не следует наследовать от 2 QObject, поддерживаются только миксины (QObject + not QObject) (1) (2) .
Если это миксин, то первым должен быть объект QObject.
Ивот образец, который нужно унаследовать:
from PyQt5 import QtCore, QtGui, QtWidgets
# or
# from PySide2 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(400, 300)
self.buttonBox = QtWidgets.QDialogButtonBox(Dialog)
self.buttonBox.setGeometry(QtCore.QRect(30, 240, 341, 32))
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(
QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok
)
self.buttonBox.setObjectName("buttonBox")
self.retranslateUi(Dialog)
self.buttonBox.accepted.connect(Dialog.accept)
self.buttonBox.rejected.connect(Dialog.reject)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
_translate = QtCore.QCoreApplication.translate
Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
def init(self, parent=None):
super(self.__class__, self).__init__(parent)
self.setupUi(self)
# or
# class Dialog(QtWidgets.QDialog, Ui_Dialog):
# def __init__(self, parent=None):
# super(Dialog, self).__init__(parent)
# self.setupUi(self)
Dialog = type("Dialog", (QtWidgets.QDialog, Ui_Dialog), {"__init__": init})
if __name__ == "__main__":
app = QtWidgets.QApplication([])
Dialog().exec_()
(1) Множественное наследование
(2) КооперативMulti-наследование