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版本(QString,QVariant等)。QVariant
PyQt5只支持V2版本的API。一個例外:對於QVariant ,去除了QPyNullVariant。
老式的信號和槽
PyQt4的舊式的信號和槽不再被支持。因此以下用法在PyQt5中已經不能使用:
- QObject.connect()
- QObject.emit()
- SIGNAL()
- SLOT()
所有那些含有參數,並且對返回結果調用SIGNAL()或SLOT()的方法不再被支持。綁定信號與調用函數總是等效的。
此外,另一個差異是增加了下面的函數:
- disconnect() 斷開所有對 QObject實例的連接,不需要參數。
新風格的信號和槽
QT實現的信號與一個可選的參數作為兩個獨立的信號,一個與論點 和一個沒有它。PyQt4暴露這兩允許你連接到他們每個 。然而,當發射信號,你必須使用適當的參數 發出的信號數。
PyQt5暴露唯一的信號在所有指定參數。然而它 允許任何可選參數被省略時,發射信號。
不同於PyQt4,PyQt5支持在類中自定義屬性、信號與槽,即使這個類沒有繼承自QObject(比如:混合類)。
QtDeclarative,QtScript和QtScriptTools模塊
PyQt4的QtDeclarative,QtScript和QtScriptTools模塊不再支持。這些已被替換為PyQt5的QtQml和QtQuick模塊,PyQt5支持 Python對象創建QML。
QtGui模塊
PyQt4的QtGui模塊,在PyQt5中被拆分成三個模塊:QtGui,QtPrintSupport和QtWidgets。
QtOpenGL模塊
只有QGlContext,QGlFormat和QGlWidget類被PyQt5支持。
QtWebKit模塊
PyQt4的QtWebKit模塊被分成PyQt5的QtWebKit和QtWebkitWidgets模塊。
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