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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM