首頁>技術>

前言

2020年12月8日 Qt 官方宣佈正式釋出 Qt 6.0(是全新 Qt 6系列的首個版本,是 Qt 的一個重要里程碑)。2020年12月10日,適用於 Qt 6的新版本 Qt for Python 官宣正式釋出了。2021年1月4日,適用於 Qt 6的新版本 PyQt6 也正式官宣釋出。

注:看來“領養的”PyQt 跟“親生的” Qt for Python 還是有所區別的啊:)

相信大家知道利用 Qt 可以開發出功能強大的、跨平臺的圖形使用者介面(GUI,Graphical User Interface)應用程式,但是 Qt 是基於 C++ 語言的 GUI 類庫,不少初學者對 C++ 語言有畏難情緒,可能簡單試試後就擱置一邊棄之不顧了,很可惜沒能堅持下去。

幸運的是,可以使用“Qt + Python”的方式來克服對 C++ 語言的恐懼(Python 語言相對於 C++ 語言要簡單、更易上手),進而透過 Python 語言開發出基於 Qt 的、功能強大的、跨平臺的 GUI 應用程式。

接下來,我將對如何在 Python 中使用 Qt for Python 進行 GUI 應用程式開發作一個系列的介紹。本文是本系列第一篇文章,首先對 Qt for Python 進行介紹,供各位 Qt for Python 的初學者們參考。

注:本系列將會以 PySide6 為例進行介紹,原則上同樣適用於 PyQt6。

1. Qt + Python 簡介1.1 概述

用 Python 編寫 GUI 應用程式時,必須使用相應的 Python GUI 庫來完成。Python 語言雖然功能很強,但其自帶的 GUI 庫(Tkinter)功能相對較弱,難以開發出專業的 GUI 應用程式。

而 Qt 是一款非常優秀的跨平臺的 C++ GUI 類庫和應用程式開發框架,它體系龐大、文件齊全、介面豐富(提供包括用於圖形使用者介面、網路、執行緒、正則表示式、SQL資料庫、SVG、OpenGL、XML、使用者和應用程式設定、定位和位置服務、短距離通訊( NFC和藍芽)、網頁瀏覽、3D動畫、圖表、3D資料視覺化以及與應用商店等的 API),廣泛應用於開發功能強大的、跨平臺的、專業的 GUI 應用程式。

結合Python語言的開放性,很容易將 Qt 的 C++ GUI 類庫封裝為 Python 繫結,所以“Qt + Python”就先後有了 PyQtQt for Python

Qt + Python

1.2 優點

結合“Qt + Python”使用可以充分利用 Qt 的應用程式開發框架和功能豐富的類來設計開發 GUI 應用程式,主要有以下一些優點:

(1) 將 Qt 的跨平臺應用框架與 Python 的跨平臺解釋語言結合在一起。

(2) Qt 使用訊號與槽(Signals/Slots)機制進行物件之間的通訊,它是型別安全且弱耦合的,易於建立可重用的軟體模組。

(3) 使用 Qt Designer 工具可以視覺化地設計窗體,然後將窗體檔案轉換為 Python 程式碼檔案,可以大大提高介面設計的效率。

(4) 將 Qt 和 Python 的優點結合到一起,開發者可以利用 Qt 豐富的 UI 設計功能,但不需要掌握複雜的 C++ 語言,而是使用簡單的 Python 語言程式設計。

2. PyQt 介紹

PyQt 是一種被廣泛使用的 Python GUI 庫,它是最成熟的 GUI 應用程式開發框架之一。

PyQt 提供了一組對 Qt 跨平臺應用程式工具包(C++ GUI類庫封裝)的 Python 繫結,可以 Python 模組的方式提供給開發者使用。藉助 PyQt ,Python 開發者可以很方便地建立各種美觀、複雜、功能強大的跨平臺的 GUI 應用程式。

PyQt 被實現為超過35個擴充套件模組,並使Python可以在所有受支援的平臺(如Windows,Linux,UNIX,Android,macOS和iOS平臺)上用作 C++ 語言的替代應用程式開發語言。PyQt 也可以嵌入在基於 C++ 的應用程式中,以允許那些應用程式的使用者配置或增強應用程式的功能。

PyQt 已經發展了很多年,技術比較成熟穩定,技術文件也比較豐富,具備廣泛的影響力。

PyQt 開發者是英國的“Riverbank Computing”公司。目前它提供了 GPLv3 與商業許可兩種授權方式:個人可以免費地用於開源軟體的開發,但不可以免費用於商業目的;如果想用於商業目的,則必須購買其商業許可。

PyQt 目前歷經了以下幾個主要模組的更迭:

——PyQt3 模組:可以在Python應用程式中使用 Qt 1、Qt 2、Qt 3 的API。

——PyQt4 模組:可以在Python應用程式中使用 Qt 4 的API。

——PyQt5 模組:可以在Python應用程式中使用 Qt 5 的API。

——PyQt6 模組:可以在Python應用程式中使用 Qt 6 的API。

注1:2021年1月4日 PyQt v6.0.0釋出,這是Qt v6繫結的第一個版本。PyQt6-3D v6.0.0和PyQt6-NetworkAuth v6.0.0也同時釋出。

注2:當前 Qt 1 - 4,PyQt3 和 PyQt4 模組已經不再被支援。

PyQt 是使用 SIP 繫結生成器構建的,所以必須安裝 SIP 模組才能構建和使用 PyQt

注1:SIP 是RiverBank公司開發的用於 PyQt 的 Python/C++ 混合程式設計解決方案(將 C/C++ 庫建立為 Python 繫結的工具)。

注2:2021年1月4日 SIP v6.0.0釋出。它刪除了對 SIP v5中不推薦使用的所有功能的支援,並添加了 PyQt6 所需的新功能。它還支援 PyQt5。

PyQt 學習參考資料:

PyQt 學習參考資料

注:目前 PyQt 官網尚未提供專門的 PyQt6 參考資料,可以參考 PyQt5 的。

3. Qt for Python 簡介

Qt for Python Logo

Qt for Python 專案旨在為 PySide 模組提供完整的 Qt 介面支援,這樣就可以在 Python 應用程式中使用 Qt 的 API,允許 Python 開發人員充分利用 Qt 的潛力來開發各種美觀、複雜、功能強大的跨平臺的 GUI 應用程式。

Qt for Python 提供了一組對 Qt 跨平臺應用程式和 UI 框架(C++ GUI類庫封裝)的 Python 官方繫結,包含兩個模組:

——PySide 模組:提供可在 Python 應用程式中使用 Qt 的 API。

——Shiboken 模組:附帶一個 Python 繫結生成器,可以把 C++ 專案轉換為 Python 專案。

Qt for Python 目前歷經了以下幾個主要模組的更迭:

——Pyside 模組(對標 PyQt4):可以在 Python 應用程式中使用 Qt 4.6+ 的 API。

——PySide2 模組(對標 PyQt5):可以在 Python 應用程式中使用 Qt 5.12+ 的 API。

——PySide6 模組(對標 PyQt6):可以在 Python 應用程式中使用 Qt 6 的 API。

注1:2020年12月8日 PySide v6.0.0釋出,這是 Qt v6 Python 官方繫結的第一個版本。

注2:當前 PySide 模組已經不再被支援。

Qt for Python 的開發者是“ Qt for Python Team ”。目前它提供了GPLv3、LGPLv3 與商業許可三種授權方式:個人可以免費地用於開源軟體的開發(遵循 GPL 許可);也可以免費用於商業目的(需遵循 LGPL 許可規則);如果想用於商業目的,則必須購買其商業許可。

Qt for Python 提供了與 PyQt 類似的功能,最大的區別就是在於Qt for Python 提供了 LGPL 授權,這意味著開發者可以免費用於商業。

Pyside 模組依賴於 Shiboken 模組,而 Shiboken 是一個用於將 C/C++ 庫生成基於 CPython 的繫結程式碼生成器,可以把 C++ 專案轉換為 Python 專案。

注:2020年12月8日 Shiboken v6.0.0釋出。

下圖為執行時架構:

執行時架構

下圖總結了 Shiboken 在 Qt for Python 中的作用。

Shiboken 在 Qt for Python 中的作用

Qt for Python 學習參考資料:

Qt for Python學習參考資料

4. Qt for Python 對比 PyQt

本章透過對比方式來展現各版本的 Qt for Python 和 PyQt 之間的區別:

4.1 PySide6 vs PyQt6

PySide6 與 PyQt6 的區別如下表所示:(最新發布,建議新學者直接上手)

PySide6 vs PyQt6

注:PySide6 相較於 PySide2,不再支援 Python 2.7, 3.5,目前版本(6.0.0)中基礎模組有大量刪減,後續版本中相關模組會陸續補充完善進來。

4.2 PySide2 vs PyQt5

PySide2 與 PyQt5 的區別如下表所示:(技術穩定,文件豐富,當前應用主流)

PySide2 vs PyQt5

4.3 PySide vs PyQt4

PySide 與 PyQt4 的區別如下表所示:(已經過時,不再支援)

PySide vs PyQt4

結束語

本系列介紹如何在 Python 中使用 Qt for Python 進行 GUI 應用程式開發。

本文是《Qt for Python 學習筆記》系列第一篇,對 Qt for Python 進行了介紹,接下來會介紹如何搭建 PySide6 開發環境,敬請期待!

137
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 由淺入深!阿里最新Java知識圖譜2021版,假期看這份夠了