PyQt5教程——學習如何創建一個2018年的Python GUI

PyQt5教程——學習如何創建一個2018年的Python GUI

本教程展示瞭如何使用PyQt5來構建Python的桌面應用程序。它涵蓋了所有知識,包括在2018年配置PyQt的最佳實踐、如何編譯你的應用程序並將其分發到其他人的電腦上。你可以使用Windows、Mac或Linux。惟一的先決條件是安裝python3(最好是3.5)。

PyQt5是什麼?(私信小編007即可自動獲取大量Python視頻教程以及各類PDF!)

PyQt是一個庫,它允許你使用來自Python的Qt GUI框架。Qt本身是用C++編寫。在Python中使用它,你可以更快地構建應用程序,而不會犧牲C++的大部分運行速度。

PyQt5指的是Qt的最新的5版本,你可能仍然會在網上見到(Py)Qt4,但它已經過時了,不再受支持了。

PyQt的一個有趣的新競爭者是Python的Qt。它們的API實際上是相同的。與PyQt不同的是,Qt for Python是在LGPL下獲得許可的,因此可以在商業項目中免費使用。不利的一面是,它並不成熟。我們在本教程中使用PyQt是因為它更穩定。然而,由於Python的Qt API非常相似,所以你可以很容易地將應用程序相互切換。

安裝PyQt

在Python中管理依賴性的最好方法是通過虛擬環境。虛擬環境僅僅是一個本地目錄,其中包含特定項目的庫。與在系統範圍安裝這些庫不同,那樣做將會影響到你的所有項目。

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


PyQt5教程——學習如何創建一個2018年的Python GUI


這就創建了venv/ 文件夾。要激活Windows上的虛擬環境,運行:


PyQt5教程——學習如何創建一個2018年的Python GUI


在Mac和Linux上,使用:


PyQt5教程——學習如何創建一個2018年的Python GUI


你以看到,虛擬環境是通過shell中的(venv)前綴激活的:


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


我們使用版本 5.9.2 是因為不是所有(Py)Qt版本都是一樣穩定的。但是這個版本肯定是沒問題。先不要管其他了——首先要恭喜一下!你已經成功地配置了PyQt5。

創建一個圖形用戶界面

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


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


這是Qt的一個要求:每個GUI應用程序都必須有一個QApplication的實例。在執行上述命令之前,Qt的部分功能是不起作用的。因此,幾乎每一個你寫的(Py)Qt應用中都需要用到它。

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

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


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


如果所有這些都像預期的那樣工作,那就做得非常好了!你剛剛用Python和Qt構建了第一個GUI應用程序

微件

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

下面的截圖顯示了最常見的Qt微件:


PyQt5教程——學習如何創建一個2018年的Python GUI


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

•QLabel

•QComboBox

•QCheckBox

•QRadioButton

•QPushButton

•QTableWidget

•QLineEdit

•QSlider

•QProgressBar

佈局

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


PyQt5教程——學習如何創建一個2018年的Python GUI


這張截圖的代碼是:


PyQt5教程——學習如何創建一個2018年的Python GUI


和通常一樣,我們先實例化一個QApplication。然後,我們創建一個窗口。我們使用最基本的QWidget ,因為它僅僅是充當一個容器,我們不希望它有任何特殊的行為。接下來,我們創建佈局並向其添加兩個QPushButtons。最後,我們告訴窗口使用這個佈局(及其內容)。在我們的第一個應用程序中,我們結束了對.show()和app.exec_()的調用。

當然也有很多其他類型的佈局(例如QHBoxLayout可以在一行中列出項目)。請參閱Qt的文檔概述。

自定義樣式

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

內置的樣式

改變應用程序外觀的最粗略的方法是設置全局樣式。回想一下上面的微件截圖:


PyQt5教程——學習如何創建一個2018年的Python GUI


它使用了一種稱為Fusion的樣式。如果你使用的是Windows 風格,那麼它看起來是這樣的:


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


可用的樣式取決於你的操作系統,但通常是"Fusion"、 "Windows"、"WindowsVista"(僅Windows)和"Macintosh" (僅Mac)。

自定義顏色

如果你喜歡一種樣式,但想要改變它的顏色(例如 對一個黑暗主題),您可以使用QPalette 和app.setPalette(...)。例如:


PyQt5教程——學習如何創建一個2018年的Python GUI


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


PyQt5教程——學習如何創建一個2018年的Python GUI


對於Fusion樣式的黑色主題,請看這裡。

樣式表

除此之外,您還可以通過樣式表更改應用程序的外觀。這是Qt的CSS類比。比如,我們可以這樣來增加一些間距:


PyQt5教程——學習如何創建一個2018年的Python GUI


PyQt5教程——學習如何創建一個2018年的Python GUI


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

信號/插槽

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


PyQt5教程——學習如何創建一個2018年的Python GUI


PyQt5教程——學習如何創建一個2018年的Python GUI


上文高亮顯示的這條線很有趣:button.clicked是一個信號,.connect(...)讓我們在它上面安裝一個被稱作插槽的東西。這只是一個在信號發生時被調用的函數。在上面的例子中,我們的插槽顯示了一個消息框。

在使用C++時,術語“插槽”是很重要的,因為插槽必須以一種特殊的方式在C++中聲明。然而,在Python中,任何函數都可以是一個插槽——我們已經在上面見識到了。由於這個原因,插槽和“正常”功能之間的區別與我們沒有什麼關係。

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

編譯你的應用程序

現在你已經掌握了創建一個響應用戶輸入的GUI的基本知識。假設你寫了一個應用程序,它可以在你的電腦上運行。但是你要如何把它給別人,而且同樣也能運行?

你可以讓你的用戶像我們上面做的那樣安裝Python和PyQt,然後給他們你的源代碼。但這樣非常令人不爽(而且通常是不切實際的)。我們想要的是應用的獨立版本,也就是說,一個二進制可執行文件,其他人可以在他們的系統上運行,並且不需要安裝任何東西。

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

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


PyQt5教程——學習如何創建一個2018年的Python GUI


然後,執行以下操作:


PyQt5教程——學習如何創建一個2018年的Python GUI


這裡提示你有一些值:


PyQt5教程——學習如何創建一個2018年的Python GUI


在你輸入run命令後,會打開一個空窗口:


PyQt5教程——學習如何創建一個2018年的Python GUI


這是一個和我們之前所見完全一樣的PyQt5應用。它的源代碼在你的當前文件目錄下的src/main/python/main.py 中。但這裡有一個很酷的設計:我們可以使用fbs將其轉換為獨立的可執行文件!


PyQt5教程——學習如何創建一個2018年的Python GUI


這命令會在你的當前文件目錄的target/MyApp/文件夾中放置一個自包含的二進制文件。現在,你可以把它發送給你的朋友(必須是和你一樣的操作系統),這樣他們就可以運行你的應用了!

(請注意,fbs目前的目標是Python 3.5。如果你有一個不同的版本,而且無法正常運行的話,請安裝Python 3.5並再次嘗試。在macOS上,你還可以安裝Python 3.5和Homebrew。)

額外:創建一個安裝程序

fbs還允許你通過命令

PyQt5教程——學習如何創建一個2018年的Python GUI

為你的應用創建一個安裝程序:

PyQt5教程——學習如何創建一個2018年的Python GUI


PyQt5教程——學習如何創建一個2018年的Python GUI


有關如何為現有應用程序使用fbs的更多信息,請參閱本文。或是fbs的教程。

最後總結

如果你已經成功進行到這裡的話,那麼大大的恭喜你。希望你現在已經很好地瞭解PyQt(以及它的各個部分),學會使用Python編寫桌面應用程序。我們還看到了fbs如何協助你創建獨立的可執行程序和安裝程序。


分享到:


相關文章: