Home >> Blog >> PyQt5 是什麼?

Python語言在我們處理SEO優化的過程中,可以說是形影不離,今天就來談談其中的PyQt GUI解決方式。

PyQt5 是什麼?

本 PyQt5 教學展示瞭如何使用 Python 3 和 Qt 在 Windows、Mac 或 Linux 上創建 GUI。它甚至包括為您的應用程式創建安裝程式。

PyQt 是一個庫,可讓您 從 Python使用Qt GUI 框架。Qt 本身是用 C++ 編寫的。通過在 Python 中使用它,您可以更快地構建應用程式,而不會犧牲 C++ 的大部分速度。

PyQt5 指的是 Qt 的最新版本 5。您可能仍然會在網絡上發現偶爾提到 (Py)Qt4,但它已經過時且不再受支持。

PyQt 的一個有趣的新競爭對手是 Qt for Python。它的 API 幾乎是相同的。與 PyQt 不同,它在 LGPL 下獲得許可,因此可以在商業項目中免費使用。它得到了 Qt 公司的支持,因此很可能是未來。我們在這裡使用 PyQt 是因為它更成熟。由於 API 非常相似,您可以在以後輕鬆地將您的應用程式切換到 Qt for Python。

安裝 PyQt

在 Python 中管理依賴關係的最佳方式是通過 虛擬環境。虛擬環境只是一個本地目錄,其中包含特定項目的庫。這與這些庫的系統範圍安裝不同,後者也會影響您的所有其他項目。

要在當前目錄中創建虛擬環境,請執行以下命令:

python3 -m venv venv

這將創建venv/文件夾。要在 Windows 上啟動虛擬環境,請運行:

調用 venv/scripts/activate.bat

在 Mac 和 Linux 上,使用:

源 venv/bin/啟動

(venv)您可以通過shell 中的前綴 看到虛擬環境處於活動狀態 :

PyQt5 是什麼?

要現在安裝 PyQt,請發出以下命令:

點安裝 PyQt5

恭喜!您已成功設置 PyQt5。

創建圖形用戶界面

是時候編寫我們的第一個 GUI 應用程式了!在虛擬環境仍處於活動狀態的情況下,啟動 Python。我們將執行以下命令:

PyQt5 是什麼?

首先,我們通過 import 語句告訴 Python 加載 PyQt:

從 PyQt5.QtWidgets 導入 QApplication、QLabel

接下來,我們使用命令創建一個 : QApplication

應用程式 = QApplication([])

這是 Qt 的要求:每個 GUI 應用程式都必須有一個QApplication. 在執行上述行之前,Qt 的許多部分都無法工作。因此,您幾乎在您編寫的每個 (Py)Qt 應用程式中都需要它。

上一行中的括號[]表示傳遞給應用程式的命令行參數。因為我們的應用程式不使用任何參數,所以我們將括號留空。

現在,為了實際看到一些東西,我們創建了一個簡單的標籤:

label = QLabel('Hello World!')

然後,我們告訴 Qt 在螢幕上顯示標籤:

標籤.show()

根據您的操作系統,這已經打開了一個小窗口:

PyQt5 是什麼?

最後一步是將控制權交給 Qt 並要求它“運行應用程式直到用戶關閉它”。這是通過以下命令完成的:

應用程式.exec()

如果這一切都按預期工作,那就乾得好!您剛剛使用 Python 和 Qt 構建了您的第一個 GUI 應用程式。

小套件

您在 (Py)Qt 應用程式中看到的一切都是 小套件:按鈕、標籤、窗口、對話框、進度條等。與 HTML 元素一樣,小套件通常是嵌套的。例如,一個窗口可以包含一個按鈕,而該按鈕又包含一個標籤。

以下螢幕截圖顯示了最常見的 Qt 小套件:

PyQt5 是什麼?

從上到下,從左到右,它們是:

  • QLabel
  • QComboBox
  • QCheckBox
  • QRadioButton
  • QPushButton
  • QTableWidget
  • QLine編輯
  • QS滑塊
  • QProgressBar

如果您有興趣,可以 在 此處 下載螢幕截圖中顯示的應用程式程式碼

佈局

與上面的示例一樣,您的 GUI 很可能由多個小套件組成。在這種情況下,您需要告訴 Qt 如何定位它們。例如,您可以使用 QVBoxLayout 垂直堆疊小套件:

PyQt5 是什麼?

此螢幕截圖的程式碼是:

從 PyQt5.QtWidgets 導入 QApplication、QWidget、QPushButton、QVBoxLayout
應用程式 = QApplication([])
窗口 = QWidget()
佈局 = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('底部'))
window.setLayout(佈局)
窗口.show()
應用程式.exec()

和以前一樣,我們實例化一個QApplication. 然後,我們創建一個window. 我們為它使用最基本的類型 QWidget,因為它只是充當容器,我們不希望它有任何特殊行為。接下來,我們創建layout並添加兩個 QPushButtons。最後,我們告訴窗口使用這個佈局(以及它的內容)。.show()與我們的第一個應用程式一樣,我們以對and 的調用結束app.exec()。

當然還有許多其他類型的佈局(例如, QHBoxLayout用於連續佈局項目)。 有關概述, 請參閱 Qt 的文檔 。

自定義樣式

Qt 的優勢之一是它支持自定義樣式。有許多機制可以讓您自定義應用程式的外觀。本節概述了一些。

內置樣式

更改應用程式外觀的最粗略的方法是設置全局 Style。回想一下上面的小套件螢幕截圖:

PyQt5 是什麼?

這使用了一種名為Fusion. 如果您改用該Windows樣式,則它看起來如下:

PyQt5 是什麼?

要應用樣式,請使用app.setStyle(...):

從 PyQt5.QtWidgets 導入 *
應用程式 = QApplication([])
app.setStyle('融合')
...

可用樣式取決於您的平台,但通常是 'Fusion'、'Windows'、 'WindowsVista'(僅限 Windows)和 'Macintosh'(僅限 Mac)。

自定義顏色

如果你喜歡一種風格,但想改變它的顏色(例如,改為深色主題),那麼你可以使用 QPalette 和app.setPalette(...). 例如:

從 PyQt5.QtCore 導入 Qt
從 PyQt5.QtGui 導入 QPalette
從 PyQt5.QtWidgets 導入 QApplication、QPushButton

應用程式 = QApplication([])
app.setStyle('融合')
調色板 = QPalette()
調色板.setColor(QPalette.ButtonText,Qt.red)
app.setPalette(調色板)
按鈕 = QPushButton('Hello World')
按鈕.show()
應用程式.exec()

這會將按鈕中的文本顏色更改為紅色:

PyQt5 是什麼?

有關 Fusion 風格的深色主題,請參見 此處。

樣式表

除了上述之外,您還可以通過樣式表更改應用程式的外觀。這是 Qt 的 CSS 類比。例如,我們可以使用它來添加一些間距:

從 PyQt5.QtWidgets 導入 QApplication、QPushButton
應用程式 = QApplication([])
app.setStyleSheet("QPushButton { 邊距:10ex; }")
按鈕 = QPushButton('Hello World')
按鈕.show()
應用程式.exec()

PyQt5 是什麼?

有關樣式表的更多信息,請參閱 Qt 的文檔。

信號/插槽

Qt 使用一種稱為信號的機制來讓您對諸如用戶單擊按鈕之類的事件作出反應。以下示例說明了這一點。它包含一個按鈕,單擊該按鈕時會顯示一個消息框:

從 PyQt5.QtWidgets 導入 *
應用程式 = QApplication([])
button = QPushButton('點擊')
def on_button_clicked():
警報 = QMessageBox()
alert.setText('你點擊了按鈕!')
警報.exec()

button.clicked.connect(on_button_clicked)
按鈕.show()
應用程式.exec()

有趣的行在上面突出顯示: button.clicked是一個信號, .connect(...)讓我們在其上安裝一個所謂的 插槽。這只是一個在信號發生時被調用的函數。在上面的示例中,我們的插槽顯示了一個消息框。

在 C++ 中使用 Qt 時,插槽一詞很重要,因為插槽必須在 C++ 中以特殊方式聲明。然而,在 Python 中,任何函數都可以是一個插槽——我們在上面看到了這一點。出於這個原因,插槽和“普通”函數之間的區別對我們來說意義不大。

信號在 Qt 中無處不在。當然,您也可以定義自己的。然而,這超出了本教學的範圍。

編譯你的應用app

您現在已經具備了創建響應用戶輸入的 GUI 的基本知識。假設您編寫了一個應用程式。它在您的計算機上運行。您如何將其提供給其他人,以便他們也可以運行它?

您可以像我們上面那樣要求您的應用程式的用戶安裝 Python 和 PyQt,然後給他們您的源程式碼。但這非常乏味(而且通常不切實際)。相反,我們想要的是您的應用程式的獨立版本。也就是說,其他人可以在他們的系統上運行而無需安裝任何東西的二進制可執行文件。

在 Python 世界中,將源程式碼轉換為獨立的可執行文件的過程稱為凍結。儘管有許多庫可以解決這個問題——例如 PyInstaller、py2exe、cx_Freeze、bbfreze、py2app……——凍結 PyQt 應用程式一直是一個令人驚訝的難題。

我們將使用一個名為 fbs的新庫,它允許您為 PyQt 應用程式創建獨立的可執行文件。要安裝它,請輸入命令:

點安裝 fbs
然後,執行以下命令:

fbs 啟動項目
這會提示您輸入一些值:

PyQt5 是什麼?

當您輸入建議的run命令時,應該會打開一個空窗口:

PyQt5 是什麼?

這是一個 PyQt5 應用程式,就像我們之前看到的一樣。它的源程式碼src/main/python/main.py 在您的當前目錄中。但這裡有一個很酷的部分:我們可以使用 fbs 將它變成一個獨立的可執行文件!

fbs凍結

這會將一個獨立的二進製 target/MyApp/文件放在當前目錄的文件夾中。您可以將其發送給您的朋友(使用與您相同的操作系統),他們將能夠運行您的應用程式!

(請注意,免費版 fbs 僅支持 Python 3.5 或 3.6。如果您有不同的版本,請安裝這些支持的 Python 版本之一或購買 fbs Pro)。

獎勵:創建安裝程式

fbs 還允許您通過以下命令為您的應用程式創建安裝程式fbs installer:

PyQt5 是什麼?

(如果您在 Windows 上,您首先需要安裝 NSIS並將其放在您的PATH.)

有關如何將 fbs 用於現有應用程式的更多信息,請參閱 本文。或者 fbs的教學。

概括

如果你已經做到了這一步,那麼恭喜你。希望您現在對如何使用 PyQt(及其各個部分)使用 Python 編寫桌面應用程式有一個很好的了解。我們還看到了 fbs 如何讓您創建獨立的可執行文件和安裝程式。