发布网友 发布时间:2023-05-31 11:22
共1个回答
热心网友 时间:2024-01-04 19:26
PyQt5不兼容PyQt4(尽管经验表明,将PyQt4的应用程序移植到PyQt5难度不是很大)。本节描述了两者之间的主要差异。
支持Python的版本
不支持较早的Python2.6之前的版本┊。
推荐使用特性
PyQt5不支持任何被标记为过时的或废弃的QTV5.0的API。然而,还是可能有一些“漏网之鱼”。如果将来发现了,这些错误将被删除。
多个API
PyQt4支持许多不同的API版本(QString,QVariant等)。QVariant
PyQt5只支持V2版本的API。一个例外:对于QVariant,去除了。
老式的信号和槽
PyQt4的旧式的信号和槽不再被支持。因此以下用法在PyQt5中已经不能使用:
QObject.connect()
QObject.emit()
SIGNAL()
SLOT()
所有那些含有参数,并且对返回结果调用SIGNAL()或SLOT()的方法不再被支持。绑定信号与调用函数总是等效的。
此外,另一个差异是增加了下面的函数:
disconnect()断开所有对QObject实例的连接,不需要参数。
新风格的信号和槽
QT实现的信号与一个可选的参数作为两个独立的信号,一个与论点和一个没有它。PyQt4暴露这两允许你连接到他们每个。然而,当发射信号,你必须使用适当的参数发出的信号数。
PyQt5暴露唯一的信号在所有指定参数。然而它允许任何可选参数被省略时,发射信号。
不同于PyQt4,PyQt5支持在类中自定义属性、信号与槽,即使这个类没有继承自QObject(比如:混合类)。
,QtScript和模块
PyQt4的,QtScript和模块不再支持。这些已被替换为PyQt5的QtQml和QtQuick模块,PyQt5支持Python对象创建QML。
QtGui模块
PyQt4的QtGui模块,在PyQt5中被拆分成三个模块:QtGui,和QtWidgets。
QtOpenGL模块
只有QGlContext,QGlFormat和QGlWidget类被PyQt5支持。
QtWebKit模块
PyQt4的QtWebKit模块被分成PyQt5的QtWebKit和模块。
pyqtconfig模块
PyQt4的pyqtconfig模块不支持。截面PyQt5扩展的API介绍了支持PyQt5(例如提供第三方包qscintilla),要建立在PyQt5。
dbus.mainloop.qt模块
PyQt4的dbus.mainloop.qt模块称为dbus.mainloop.PyQt5在PyQt5。这使得他们可以并排安装。它们的功能是相同。
QDataStream
的reaint8(),readint8(),writeuint8()和writeint8()方法解释值读写数字。PyQt4中它们被解释为单个字符的字符串。
QFileDialog
PyQt4的QFileDialog类的(),()和()方法,在PyQt5中已更名为(),()和()。
而PyQt4原来的(),()和()不再被PyQt5支持。
QGraphicsItemAnimation
对废弃的QGraphicsItemAnimation类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QPropertyAnimation替换。
QMatrix
对废弃的QMatrix类的支持已被删除。如果移植现有的PyQt4应用程序,首先考虑用QTransform替换。
QPyTextObject
PyQt4的QPyTextObject,是作为一个无法定义一个继承多个Qt类的Python类的变通的解决方法。PyQt5支持定义一个Python类,来继承多个Qt类,只要他们已经在C声明为Q_DECLARE_INTERFACE。所以,QPyTextObject没有在PyQt5中实现。
QSet
PyQt4,套装在Python中的V2和V3一组Python列表实现。在PyQt5套装总是作为一个集实现。
pyuic5
pyuic5不支持pyqt3——包装国旗pyuic4。
pyr5
pyr5不支持-PY2和-PY3国旗pyr4。输出pyr5兼容所有版本的PythonPython2.6入手。
多重继承
不像PyQt4PyQt5类实现多重继承,合作。在其他的话总是做PyQt5类下面的Python代码在等效V3__init__方法(如kwds是一个未使用的关键词参数字典):
super().__init__(**kwds)
这意味着,那些未使用的关键字的参数传递给__init__任何mixin类的方法。这些混合类必须合作,即必须如果他们有自己做一个类似的电话__init__实现。
当使用多重继承PyQt4是常见的电话__init__的超类方法明确,例如:
classMyQObject(QObject,MyMixin):
def__init__(self,parent,mixin_arg):
QObject.__init__(self,parent)
MyMixin.__init__(self,mixin_arg)
#Otherinitialisation...
在上述将导致PyQt5mymixin__init__。被称为两。而要实现:
classMyQObject(QObject,MyMixin):
def__init__(self,**kwds):
super().__init__(**kwds)
#Otherinitialisation...
请注意,如果没有其他的初始化做那么__init__方法不需要。
混合类应实施如下:
classMyMixin:
def__init__(self,mixin_arg,**kwds):
super().__init__(**kwds)
#Otherinitialisation...