PyQt5系列教程(1):我與PyQt5有個約會
承蒙各位學友們的支持,《Python圖形界面編程》課程後推出後得到了1萬多的學習量。
Python圖形界面編程_騰訊課堂上也有1524人報名。
課程推出後通過與廣大學友的交流,本著對先前的課程進行進一步改進的想法(如:資料庫操作、網路傳輸等均沒有涉及),並結合當下Python3學習人員的日漸增多的情形,決定再推出一個PyQt5的教程,希望大家一起交流共同進步。當然PyQt4課程的更多實例部分將在PyQt5課程上線後會進行相應的更新,以保證課程的向下兼容。
當然同以往一樣,先進行圖文教程,再推出視頻教程(必須仍然免費)。
PyQt5是一組來自Digia的Qt5應用程序框架的Python綁定。它適用於Python2和Python3。當然我們會用python3進行講解。在教程中我們使用的Python3.5.2和PyQt5.3。
這裡給了一個官方的參看指南:PyQt5指南
PyQt5是基於Digia公司強大的圖形程式框架Qt5的python介面,由一組python模塊構成。PyQt5本身擁有超過620個類和6000函數及方法。在可以運行於多個平台,包括:Unix, Windows, and Mac OS。
PyQt5的類存在與如下模塊當中:
● QtCore
● QtGui
● QtWidgets
● QtMultimedia
● QtBluetooth
● QtNetwork
● QtPositioning
● Enginio
● QtWebSockets
● QtWebKit
● QtWebKitWidgets
● QtXml
● QtSvg
● QtSql
● QtTest
QtCore模塊涵蓋了包的核心的非GUI功能,此模塊被用於處理程序中涉及到的 time、文件、目錄、數據類型、文本流、鏈接、mime、線程或進程等對象。
QtGui模塊涵蓋多種基本圖形功能的類; 包括但不限於:窗口集、事件處理、2D圖形、基本的圖像和界面 和字體文本。
QtWidgets模塊包含了一整套UI元素組件,用於建立符合系統風格的classic界面,非常方便,可以在安裝時選擇是否使用此功能。
QtMultimedia模塊包含了一套類庫,該類庫被用於處理多媒體事件,通過調用API介面訪問攝像頭、語音設備、收發消息(radio functionality)等。
QtBluetooth模塊包含了處理藍牙活動的類庫,它的功能包括:掃描設備、連接、交互等行為。
QtNetwork模塊包含用於網路編程的類庫,這組類程序通過提供便捷的TCP/IP 及 UDP 的 c/s 程式碼集合,使得基於Qt的網路編程更容易。
QtPositioning模塊用於獲取位置信息,此模塊允許使用多種方式達成定位,包括但不限於:衛星、無線網、文字信息。此應用一般用於網路地圖定位系統。
Enginio模塊用於構建客戶端的應用程式庫,用於在運行時訪問 Qt Cloud 伺服器託管的應用程序。
QtWebSockets模塊包含了一組類程序,用以實現websocket協議。
QtWebKit包含了用於實現基於webkit2的網路瀏覽器的類庫。
QtWebKitWidgets模塊包含用於基於WebKit1的Web瀏覽器實現的類,用於基於QtWidgets的應用程序
QtXml模塊包含了用於處理XML的類庫,此模塊為SAX和DOM API 的實現提供了方法。
QtSvg模塊通過一組類,為顯示矢量圖形文件的內容提供了方法。
QtSql模塊提供了資料庫對象的介面以供使用
QtTest模塊包含了可以通過單元測試,以調試PyQt5應用程式的功能。
有同學可能會問,PyQt4與PyQt5有什麼不同,PyQt5是否會向下兼容?
恭喜你,你能夠想到這些,說明你的學習態度已經端正了,知道會獨立的進行思考了。
PyQt5並不向下兼容PyQt4,主要是由於其有幾個較大的改變。雖不兼容,但是舊代碼調整到新庫並不是很難。它們的主要差異如下:
- Python的模塊已經重新構建,一些模塊已經被放棄,如:QtScript。其他的模塊被分割到一些子模塊當中,如:QtGui,QtWebkit。
- 一些新的模塊會推出,如:QtBluetooth,QtPositioning或Enginio。
- PyQt5僅支持新型信號和插槽。對SIGNAL()或SLOT()的調用不再支持(這點很重要哦!)。
- PyQt5不支持在Qt v5.0中標記為已棄用或過時的Qt API的任何部分。
------------------------------------------------華麗分割線-----------------------------------------------------
這裡把信號與槽調用不同簡單的演示一下,給大家直觀的認識一下,具體的介紹我們後面再談:
PyQt4的編碼如下:
#coding:utf-8n nimport sysnfrom PyQt4.QtCore import (Qt, SIGNAL, SLOT)nfrom PyQt4.QtGui import (QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication)n nclass SigSlot(QWidget):n def __init__(self,parent=None):n QWidget.__init__(self)n self.setWindowTitle(XXOO)n lcd = QLCDNumber(self)n slider = QSlider(Qt.Horizontal,self)n n vbox = QVBoxLayout()n vbox.addWidget(lcd)n vbox.addWidget(slider)n n self.setLayout(vbox)n n self.connect(slider,SIGNAL(valueChanged(int)),lcd,SLOT(display(int)))n self.resize(350,250)n napp = QApplication(sys.argv)nqb = SigSlot()nqb.show()nsys.exit(app.exec_())n
PyQt5的編碼如下:
#coding:utf-8n nimport sysnfrom PyQt5.QtCore import Qtnfrom PyQt5.QtWidgets import (QWidget, QLCDNumber, QSlider, QVBoxLayout, QApplication)n nclass SigSlot(QWidget):n def __init__(self,parent=None):n QWidget.__init__(self)n self.setWindowTitle(XXOO)n lcd = QLCDNumber(self)n slider = QSlider(Qt.Horizontal,self)n n vbox = QVBoxLayout()n vbox.addWidget(lcd)n vbox.addWidget(slider)n n self.setLayout(vbox)n n slider.valueChanged.connect(lcd.display)n self.resize(350,250)n napp = QApplication(sys.argv)nqb = SigSlot()nqb.show()nsys.exit(app.exec_())n
執行結果如下:
大家可以自行體會一下PyQt4與PyQt5的不同。
ok,今天就說到這裡,下期我們再約!
這個是我的微信公眾號:學點編程吧,有興趣就關注下吧!
推薦閱讀: