PyQt5系列教程(1):我與PyQt5有個約會

承蒙各位學友們的支持,《Python圖形界面編程》課程後推出後得到了1萬多的學習量。

Python圖形界面編程_騰訊課堂ke.qq.com圖標

上也有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,主要是由於其有幾個較大的改變。雖不兼容,但是舊代碼調整到新庫並不是很難。它們的主要差異如下:

  1. Python的模塊已經重新構建,一些模塊已經被放棄,如:QtScript。其他的模塊被分割到一些子模塊當中,如:QtGui,QtWebkit。

  2. 一些新的模塊會推出,如:QtBluetooth,QtPositioning或Enginio。

  3. PyQt5僅支持新型信號和插槽。對SIGNAL()或SLOT()的調用不再支持(這點很重要哦!)。

  4. 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,今天就說到這裡,下期我們再約!

這個是我的微信公眾號:學點編程吧,有興趣就關注下吧!


推薦閱讀:

TAG:Python | Python教程 | PyQt |