
本教程展示瞭如何使用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中管理依賴性的最好方法是通過虛擬環境。虛擬環境僅僅是一個本地目錄,其中包含特定項目的庫。與在系統範圍安裝這些庫不同,那樣做將會影響到你的所有項目。
要在當前目錄中創建虛擬環境,請執行以下命令:

這就創建了venv/ 文件夾。要激活Windows上的虛擬環境,運行:
在Mac和Linux上,使用:
你以看到,虛擬環境是通過shell中的(venv)前綴激活的:
現在安裝PyQt,發出以下命令:
我們使用版本 5.9.2 是因為不是所有(Py)Qt版本都是一樣穩定的。但是這個版本肯定是沒問題。先不要管其他了——首先要恭喜一下!你已經成功地配置了PyQt5。
創建一個圖形用戶界面
是時候編寫我們的第一個GUI應用了!在虛擬環境仍然活躍的情況下,啟動Python。我們將執行以下命令:
首先,我們告訴Python通過import語句加載PyQt:
接下來,我們使用以下命令創建QApplication:
這是Qt的一個要求:每個GUI應用程序都必須有一個QApplication的實例。在執行上述命令之前,Qt的部分功能是不起作用的。因此,幾乎每一個你寫的(Py)Qt應用中都需要用到它。
上面一行的 [] 括號表示傳遞給應用程序的命令行參數。因為我們的應用程序不使用任何參數,所以我們把括號留空。
現在,為了真正看到一些東西,我們創建了一個簡單的標籤:
然後,我們告訴Qt在屏幕上顯示標籤:
根據你的操作系統,這時應該已經打開了一個小窗口:
最後一步是將控制權交給Qt,並要求它“運行應用程序,直到用戶關閉它”。這是通過以下命令完成的:
如果所有這些都像預期的那樣工作,那就做得非常好了!你剛剛用Python和Qt構建了第一個GUI應用程序
微件
你在(Py)Qt應用程序中看到的一切都是一個微件:按鈕、標籤、窗口、對話框、進度條等。就像HTML元素一樣,微件通常是嵌套的。例如,一個窗口可以包含一個按鈕,這個按鈕又包含一個標籤。
下面的截圖顯示了最常見的Qt微件:
從上到下,從左到右,它們是:
•QLabel
•QComboBox
•QCheckBox
•QRadioButton
•QPushButton
•QTableWidget
•QLineEdit
•QSlider
•QProgressBar
佈局
與上面的例子一樣,你的GUI很可能由多個微件組成。在這種情況下,你需要告訴Qt如何定位它們。例如,你可以使用QVBoxLayout垂直地堆疊微件:
這張截圖的代碼是:
和通常一樣,我們先實例化一個QApplication。然後,我們創建一個窗口。我們使用最基本的QWidget ,因為它僅僅是充當一個容器,我們不希望它有任何特殊的行為。接下來,我們創建佈局並向其添加兩個QPushButtons。最後,我們告訴窗口使用這個佈局(及其內容)。在我們的第一個應用程序中,我們結束了對.show()和app.exec_()的調用。
當然也有很多其他類型的佈局(例如QHBoxLayout可以在一行中列出項目)。請參閱Qt的文檔概述。
自定義樣式
Qt的優勢之一是它對定製樣式的支持。有許多機制可以讓你自定義應用程序的外觀和感覺。本節概述了一些。
內置的樣式
改變應用程序外觀的最粗略的方法是設置全局樣式。回想一下上面的微件截圖:
它使用了一種稱為Fusion的樣式。如果你使用的是Windows 風格,那麼它看起來是這樣的:
要應用樣式,請使用 app.setStyle(...):
可用的樣式取決於你的操作系統,但通常是"Fusion"、 "Windows"、"WindowsVista"(僅Windows)和"Macintosh" (僅Mac)。
自定義顏色
如果你喜歡一種樣式,但想要改變它的顏色(例如 對一個黑暗主題),您可以使用QPalette 和app.setPalette(...)。例如:
這將把按鈕的文本顏色更改為紅色:
對於Fusion樣式的黑色主題,請看這裡。
樣式表
除此之外,您還可以通過樣式表更改應用程序的外觀。這是Qt的CSS類比。比如,我們可以這樣來增加一些間距:
有關樣式表的更多信息,請參閱Qt的文檔。
信號/插槽
Qt使用一種稱為信號的機制,讓你對諸如用戶單擊按鈕之類的事件作出反應。下面的例子說明了這一點。它包含一個按鈕,被點擊時,它會顯示一個消息框:
上文高亮顯示的這條線很有趣:button.clicked是一個信號,.connect(...)讓我們在它上面安裝一個被稱作插槽的東西。這只是一個在信號發生時被調用的函數。在上面的例子中,我們的插槽顯示了一個消息框。
在使用C++時,術語“插槽”是很重要的,因為插槽必須以一種特殊的方式在C++中聲明。然而,在Python中,任何函數都可以是一個插槽——我們已經在上面見識到了。由於這個原因,插槽和“正常”功能之間的區別與我們沒有什麼關係。
信號在Qt中無處不在,當然,你也可以定義自己的信號。然而,這超出了本教程的範圍。
編譯你的應用程序
現在你已經掌握了創建一個響應用戶輸入的GUI的基本知識。假設你寫了一個應用程序,它可以在你的電腦上運行。但是你要如何把它給別人,而且同樣也能運行?
你可以讓你的用戶像我們上面做的那樣安裝Python和PyQt,然後給他們你的源代碼。但這樣非常令人不爽(而且通常是不切實際的)。我們想要的是應用的獨立版本,也就是說,一個二進制可執行文件,其他人可以在他們的系統上運行,並且不需要安裝任何東西。
在Python世界中,將源代碼轉換成一個獨立的可執行文件的過程被稱為凍結。儘管有許多庫解決了這個問題——比如PyInstaller、py2exe、cx_Freeze, bbfreze, py2app 等等——傳統上,凍結PyQt應用一直是一個令人驚訝的難題。
我們將使用一個叫做fbs的新庫,它允許你為PyQt應用程序創建獨立的可執行文件。要安裝它,請輸入以下命令:
然後,執行以下操作:
這裡提示你有一些值:
在你輸入run命令後,會打開一個空窗口:
這是一個和我們之前所見完全一樣的PyQt5應用。它的源代碼在你的當前文件目錄下的src/main/python/main.py 中。但這裡有一個很酷的設計:我們可以使用fbs將其轉換為獨立的可執行文件!
這命令會在你的當前文件目錄的target/MyApp/文件夾中放置一個自包含的二進制文件。現在,你可以把它發送給你的朋友(必須是和你一樣的操作系統),這樣他們就可以運行你的應用了!
(請注意,fbs目前的目標是Python 3.5。如果你有一個不同的版本,而且無法正常運行的話,請安裝Python 3.5並再次嘗試。在macOS上,你還可以安裝Python 3.5和Homebrew。)
額外:創建一個安裝程序
fbs還允許你通過命令
為你的應用創建一個安裝程序:
有關如何為現有應用程序使用fbs的更多信息,請參閱本文。或是fbs的教程。
最後總結
如果你已經成功進行到這裡的話,那麼大大的恭喜你。希望你現在已經很好地瞭解PyQt(以及它的各個部分),學會使用Python編寫桌面應用程序。我們還看到了fbs如何協助你創建獨立的可執行程序和安裝程序。
閱讀更多 編程夢工廠 的文章