zoukankan      html  css  js  c++  java
  • PyQt 5.4参考指南 ---- PyQt5和PyQt4之间的差异

      https://study.163.com/provider/400000000398149/index.htm?share=2&shareId=400000000398149(欢迎关注博主主页,学习python视频资源)

     

    pyqt4只有440个类,

    pyqt5有1000个类

    pyqt商业版本和开源版本没有功能区别,如果pyqt与gpl协议不兼容,则考虑购买pyqt商业版本。

    GPL协议,general public liscense代码开源协议

    http://www.mamicode.com/info-detail-456379.html

    标签:

    PyQt5 和 PyQt4 之间的差异

    PyQt5不兼容PyQt4(尽管经验表明,将PyQt4的应用程序移植到PyQt5难度不是很大)。本节描述了两者之间的主要差异。

    支持Python的版本

    不支持较早的Python2.6之前的版本┊。

    推荐使用特性

    PyQt5不支持任何被标记为过时的或废弃的QT V5.0 的API。然而,还是可能有一些“漏网之鱼”。如果将来发现了,这些错误将被删除。

    多个API

    PyQt4支持许多不同的API版本(QStringQVariant等)。QVariant

    PyQt5只支持V2版本的API。一个例外:对于QVariant ,去除了QPyNullVariant

    老式的信号和槽

    PyQt4的旧式的信号和槽不再被支持。因此以下用法在PyQt5中已经不能使用:

    • QObject.connect()
    • QObject.emit()
    • SIGNAL()
    • SLOT()

    所有那些含有参数,并且对返回结果调用SIGNAL()SLOT()的方法不再被支持。绑定信号与调用函数总是等效的。

    此外,另一个差异是增加了下面的函数:

    • disconnect() 断开所有对 QObject实例的连接,不需要参数。

    新风格的信号和槽

    QT实现的信号与一个可选的参数作为两个独立的信号,一个与论点 和一个没有它。PyQt4暴露这两允许你连接到他们每个 。然而,当发射信号,你必须使用适当的参数 发出的信号数。

    PyQt5暴露唯一的信号在所有指定参数。然而它 允许任何可选参数被省略时,发射信号。

    不同于PyQt4,PyQt5支持在类中自定义属性、信号与槽,即使这个类没有继承自QObject(比如:混合类)。

    QtDeclarativeQtScriptQtScriptTools模块

    PyQt4的QtDeclarativeQtScriptQtScriptTools模块不再支持。这些已被替换为PyQt5的QtQmlQtQuick模块,PyQt5支持 Python对象创建QML。

    QtGui模块

    PyQt4的QtGui模块,在PyQt5中被拆分成三个模块:QtGuiQtPrintSupportQtWidgets

    QtOpenGL模块

    只有QGlContextQGlFormatQGlWidget类被PyQt5支持。

    QtWebKit模块

    PyQt4的QtWebKit模块被分成PyQt5的QtWebKitQtWebkitWidgets模块。

    pyqtconfig模块

    PyQt4的pyqtconfig模块不支持。截面PyQt5扩展的API介绍了支持PyQt5 (例如提供第三方包qscintilla ),要建立在PyQt5。

    dbus.mainloop.qt模块

    PyQt4的dbus.mainloop.qt模块称为dbus.mainloop.PyQt5在 PyQt5。这使得他们可以并排安装。它们的功能是 相同。

    QDataStream

    readuint8()readint8()writeuint8()writeint8()方法解释值 读写数字。PyQt4中它们被解释为 单个字符的字符串。

    QFileDialog

    PyQt4的QFileDialog类getOpenFileNameAndFilter()getOpenFileNamesAndFilter()getSaveFileNameAndFilter()方法,

    在PyQt5中已更名为 getOpenFileName()getOpenFileNames()getSaveFileName()

    而PyQt4原来的getOpenFileName()getOpenFileNames()getSaveFileName()不再被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

    pyrcc5

    pyrcc5不支持- PY2- PY3国旗pyrcc4。输出pyrcc5兼容所有版本的Python Python 2.6 入手。

    多重继承

    不像PyQt4 PyQt5类实现多重继承,合作。在其他的话总是做 PyQt5类下面的Python代码在等效 V3__init__方法(如kwds是一个未使用的关键词 参数字典):

    super().__init__(**kwds)
    

    这意味着,那些未使用的关键字的参数传递给__init__任何mixin类的方法。这些混合类必须合作,即 必须如果他们有自己做一个类似的电话__init__实现。

    当使用多重继承PyQt4是常见的电话__init__的超类方法明确,例如:

    class MyQObject(QObject, MyMixin):
        def __init__(self, parent, mixin_arg):
            QObject.__init__(self, parent)
            MyMixin.__init__(self, mixin_arg)
    
            # Other initialisation...
    

    在上述将导致PyQt5mymixin __init__。被称为两 。而要实现:

    class MyQObject(QObject, MyMixin):
        def __init__(self, **kwds):
            super().__init__(**kwds)
    
            # Other initialisation...
    

    请注意,如果没有其他的初始化做那么__init__方法不需要。

    混合类应实施如下:

    class MyMixin:
        def __init__(self, mixin_arg, **kwds):
            super().__init__(**kwds)
    
            # Other initialisation...
    

    如果一个类只能继承从一个单一的类仍然可以调用 超阶级的__init__方法明确(虽然它是推荐使用super())。

    看到合作支持多继承

    释放GIL

    GIL只在需要释放时才释放。而PyQt4调用Qt后总是释放GIL。

    析构

    当Python解释器退出PyQt4(默认)要求所有包裹的情况下,它拥有C++析构函数 。这发生在一个随机的顺序,可以使译员 崩溃。这种行为可以通过禁用 调用setdestroyonexit() SIP。功能。

    PyQt5总是叫setdestroyonexit() SIP。自动。但是如果用实例 没有在模块级和相反 被创建在函数然后问题依然存在。例如,不要以下这样做 :

    def main():
        app = QApplication(sys.argv)
    
        w = QWidget()
        w.show()
    
        app.exec()
    
    if __name__ == ‘__main__‘:
        main()

    以下做法是对的:

    if __name__ == ‘__main__‘:
        app = QApplication(sys.argv)
    
        w = QWidget()
        w.show()
    
        app.exec()

    个人主页

    http://www.itongji.cn/user/getSheCreateList?userId=105371

    视频教程网址
    http://sina.lt/fkem

    Python爬虫视频系列,小白入门
    http://t.cn/R8Xu2c8

  • 相关阅读:
    Linux下编译安装PCRE库
    Keepalived+Nginx实现高可用和双主节点负载均衡
    如何安装nginx第三方模块
    Nginx之http_image_filter_module模块使用
    nginx利用image_filter动态生成缩略图
    Nginx 服务器开启status页面检测服务状态
    nginx实时生成缩略图到硬盘上
    分布式文件系统 FastDFS 5.0.8 & Linux CentOS 6.7 安装配置
    spring中scope作用域(转)
    jQuery的切换函数(hover,toggle)
  • 原文地址:https://www.cnblogs.com/webRobot/p/6351301.html
Copyright © 2011-2022 走看看