【发布时间】:2019-11-14 13:48:06
【问题描述】:
PyQt5、Qt 5.9.6 会出现以下问题。
我想基于另一个类 (UserForm) 生成模态对话框类 (Dialog)。但是如果UserForm 已经从QWidget 继承,那么我的脚本会引发异常
“Dialog”对象没有属性“exec_”
或者只是静默崩溃或在控制台中显示一条消息崩溃:
QDialog::exec: 检测到递归调用
如果UserForm 是否继承自 QWidget,MRO 看起来完全一样:
(<class '__main__.Dialog'>, <class '__main__.UserForm'>, <class
'PyQt5.QtWidgets.QDialog'>, <class 'PyQt5.QtWidgets.QWidget'>, <class
'PyQt5.QtCore.QObject'>, <class 'sip.wrapper'>, <class
'PyQt5.QtGui.QPaintDevice'>, <class 'sip.simplewrapper'>, <class 'object'>)
例子:
from PyQt5 import QtWidgets
app = QtWidgets.QApplication([])
class UserForm(QtWidgets.QWidget):
pass
# class Dialog(UserForm, QtWidgets.QDialog):
# pass
Dialog = type("Dialog", (UserForm, QtWidgets.QDialog), {})
print(Dialog.__mro__)
Dialog().exec_()
我还尝试使用 PySide2、Qt 5.12 运行此代码,它可以正常工作。这是否意味着 PyQt 中存在一些错误?
【问题讨论】: