Python圖形化程式設計?來看看PyQt,一個不錯的選擇

這個PyQt5教程展示瞭如何使用Python 3和Qt在Windows,Mac或Linux上建立GUI,幾分鐘就可以快速讓你對Qt有個初步印象。

什麼是PyQt5?

PyQt 是一個庫,可讓您使用Python版本的 Qt GUI框架。Qt本身是用C ++編寫的,透過Python使用它,您可以更快地構建應用程式,並且不會犧牲很多C ++的速度。

PyQt5指的是Qt的最新版本5。您可能仍然會在網路上看到(Py)Qt4的提法,但該版本很舊,不再受支援。

PyQt的一個有趣的新競爭對手是 Python的Qt,其API實際上是相同的,與PyQt不同,它是根據LGPL許可的,因此可以在商業專案中免費使用。它得到了Qt公司的支援,因此很有可能成為未來。我們在這裡使用PyQt是因為它更加成熟。由於這些API非常相似,因此您以後可以輕鬆將應用切換到Qt for Python。

安裝PyQt

在Python中管理依賴項的最佳方法是透過虛擬環境(venv)。虛擬環境只是一個本地目錄,其中包含特定專案的庫。要在當前目錄中建立虛擬環境,請執行以下命令:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

這將建立

venv/

資料夾,要在Windows上啟用虛擬環境,請執行:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

在Mac和Linux上,使用:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

您可以透過(venv)shell中的字首看到虛擬環境處於活動狀態 :

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

現在要安裝PyQt,請執行以下命令:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

我們使用版本5。9。2的原因是並非所有(Py)Qt版本都同樣穩定,此版本比較新並且保證可以使用。恭喜!您已成功設定PyQt5。

建立一個GUI

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

首先,我們告訴Python透過import語句載入PyQt:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

[]括號表示傳遞給應用程式的命令列引數,由於我們的應用程式不使用任何引數,因此將方括號留空。

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

根據您的作業系統,這已經打開了一個很小的小視窗:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

如果所有這些都按預期工作,那麼做得好!您剛剛使用Python和Qt構建了第一個GUI應用程式。

小部件

在(Py)Qt應用程式中看到的所有內容都是小部件:按鈕,標籤,視窗,對話方塊,進度條等。類似於HTML元素,小部件通常是巢狀的。例如,視窗可以包含一個按鈕,而按鈕又包含一個標籤。

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

QLabel

QComboBox

QCheckBox

QRadioButton

QPushButton

QTableWidget

QLineEdit

QSlider

QProgressBar

版面

像上面的示例一樣,您的GUI很可能包含多個小部件。在這種情況下,您需要告訴Qt如何放置它們。例如,您可以使用 QVBoxLayout 垂直堆疊小部件:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

該螢幕截圖的程式碼是:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

和以前一樣,我們例項化一個QApplication。然後,我們建立一個window。我們使用最基本的型別 QWidget,因為它僅充當容器,我們不希望它具有任何特殊行為。接下來,我們建立layout並向其中新增兩個QPushButton。最後,我們告訴視窗使用此佈局(並因此使用其內容)。與第一個應用程式一樣,我們以。show()和 結束呼叫app。exec()。

當然,還有許多其他種類的佈局(例如, QHBoxLayout用於連續排列專案)。有關概述,請參見Qt的文件 。

自定義樣式

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

內建樣式

更改應用程式外觀的最粗略方法是設定全域性 Style,回顧上面的小部件螢幕截圖:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

這使用一種稱為的樣式Fusion,如果改用Windows樣式,則其外觀如下:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

可用樣式取決於你的平臺上,但通常 ‘Fusion’,‘Windows’, ‘WindowsVista’(僅Windows)和 ‘Macintosh’(僅限Mac)。

自定義顏色

如果您喜歡某個樣式,但想要更改其顏色(例如,更改為深色主題),則可以使用 QPalette 和app。setPalette(。。。)。例如:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

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

樣式表

除上述內容外,您還可以透過樣式表更改應用程式的外觀。這是Qt的CSS類似物。例如,我們可以使用它來新增一些間距:

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

有關樣式表的更多資訊,請參見Qt的文件。

訊號/插槽

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

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

Python圖形化程式設計?來看看PyQt,一個不錯的選擇

有趣的一行在上面高亮顯示: button。clicked是一個訊號, 。connect(。。。)讓我們在其上安裝一個所謂的 插槽。這只是在訊號出現時呼叫的函式。在上面的示例中,我們的廣告位顯示了一個訊息框。

當從C ++使用Qt時,術語“插槽”很重要,因為必須在C ++中以特殊方式宣告插槽。但是,在Python中,任何函式都可以是一個插槽-我們在上面已經看到了。因此,插槽與“常規”功能之間的區別對我們而言意義不大。

概括

如果您已經做到這一點,那麼恭喜您!希望您現在對如何使用PyQt(及其各個部分)用Python編寫桌面應用程式有所瞭解,快去試試吧!