Python QT5 簡潔入門

以下內容翻譯自https://build-system.fman.io/pyqt5-tutorial,有刪減。

我們先看下面一個簡單的GUI代碼:

from PyQt5.QtWidgets import QApplication, QLabel

app = QApplication([])
label = QLabel('Hello World!')
label.show()
app.exec_()

第一行是導入相關的QT相關的庫。

接著第二行是通過創建了一個QApplication:

app = QApplication([])

這是必須要創建的一個對象。每個GUI程序都必須有且只有一個QApplication的實例。如果沒有這個實例的話,我們寫的QT是沒法執行的,所以我們寫QT代碼的時候一定不要忘了創建這個對象。 創建這個對象時需要傳遞一個list參數,因為我們的GUI不需要什么參數,所以直接傳遞了一個[]

在創建了app之后,我們又創建了一個Label(標簽):

label = QLabel('Hello World!')

傳遞的參數就是標簽顯示的內容,然后通過調用show()方法讓它在屏幕上顯示。

最后的一行代碼是告訴qt一直運行下去,直到有人關閉它。

完成上述工作之后,執行代碼,我們的一個小小窗口就會顯示在屏幕上:

QVBoxLayout example

Widgets

我們在Qt程序中看到的每個東西都可以稱之為一個widget:按鈕,標簽,窗口,對話框,程序的進度條等等。與HTML元素類似,widget一般也都是嵌入式的。舉個例子,一個窗口包含了一個按鈕,同時也可能包含了一個標簽。

下面的截圖展示了QT中常用的widget。

Screenshot of common Qt widgets using the Fusion style

從上到下,從左到右,這些widget依次是:

Layouts

正如上面的截圖所示,我們的GUI中可能包含了多個widgets。在這種情況下,我們需要告訴QT如何安放這些widgets。例如。我們可以使用QVBoxLayout垂直堆放widget:

QVBoxLayout example

這個截圖的代碼如下:

from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QVBoxLayout
app = QApplication([])
window = QWidget()
layout = QVBoxLayout()
layout.addWidget(QPushButton('Top'))
layout.addWidget(QPushButton('Bottom'))
window.setLayout(layout)
window.show()
app.exec_()

一如既往,我們還是先創建了一個QApplication。接著我們創建了一個window。我們使用的是最基本的QWdiget,因為它只是一個容器,用來放置widget,我們并不需要它有什么特殊的功能。然后,我們就創建了一個layout,還創建了兩個QPushButton放在里面。最后,我們告訴了window,我們需要使用這個layout。然后就跟我們的第一個GUI一樣,調用show()exec_()

當然還有很多其他的layout,例如QHBoxLayOut等等。更多的風格,可以在qt的網站上查閱

自定義風格

QT一個比較強大的地方就是它支持自定義的用戶風格。

風格設置

比較直接的設置方式就是在我們的程序中直接指定全局的風格。我們再看看之前的截圖:

Screenshot of common Qt widgets using the Fusion style

上面的這個窗口風格稱之為Flusion,我們也可以把他替換成Windows風格:

Screenshot of common Qt widgets using the Windows style

通過qpp.setStyle(...)方法,我們就可以設置自己的風格了。

from PyQt5.QtWidgets import *
app = QApplication([])
app.setStyle('Fusion')
...

具體支持什么樣的風格依賴于我們使用的操作系統,但是一般都支持以下的風格:'Fusion', 'Windows', 'WindowsVista'(僅Windows支持) and 'Macintosh' (僅Mac支持)

自定義顏色

如果我們喜歡一種風格,但是我們想改變一些顏色。那么我們就可以使用QPalette來實現我們的功能。例如:

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPalette
from PyQt5.QtWidgets import QApplication, QPushButton

app = QApplication([])
app.setStyle('Fusion')
palette = QPalette()
palette.setColor(QPalette.ButtonText, Qt.red)
app.setPalette(palette)
button = QPushButton('Hello World')
button.show()
app.exec_()

執行效果如下:

Screenshot of a QPushButton with red text in the Fusion style

面板風格

除了上述的功能之外,我們還可以通過面板風格來改變我們程序的外觀。這就是QT類似于CSS的特性。我們可以通過以下的方法我們的面板添加一些空間:

from PyQt5.QtWidgets import QApplication, QPushButton
app = QApplication([])
app.setStyleSheet("QPushButton { margin: 10ex; }")
button = QPushButton('Hello World')
button.show()
app.exec_()
Qt window with a button surrounded by extra space

更多關于面板風格的信息,可以查看qt官網。

Signals / slots

QT 通過Signals(信號)機制來讓我們對一些事件做響應,例如我們點擊了一個按鈕。下面的這個例子就是當我們點擊按鈕時,會彈出對話框。

from PyQt5.QtWidgets import *
app = QApplication([])
button = QPushButton('Click')
def on_button_clicked():
    alert = QMessageBox()
    alert.setText('You clicked the button!')
    alert.exec_()

button.clicked.connect(on_button_clicked)
button.show()
app.exec_()
PyQt QMessageBox saying that a button was clicked

button.clicked這就是個signal(信號),.connect(...)就是我們指定的與這個signal關聯的slot(槽)。上面這是一個簡單的響應函數,當我們點擊這個按鈕的時候,這個動作(函數)就會觸發。

Signals在QT中是無處不在的,用戶也可以定義自己的signal。

編譯屬于自己的APP

現在我們已經有了一點關于GUI的基本知識了。但是當我們寫好一個程序之后,如何給別人使用呢?讓別人搭建環境,然后再把腳本給人家嗎?這肯定是不合理的,所以我們該怎么做呢?

在python的世界中,將源碼轉換成一個可執行的,這種操作稱之為freezing。盡管現在已經有很多的庫都可以解決這個問題,例如:PyInstaller ,py2exe,cx_Freeze,bbfreze,py2app...但是這些傳統的庫用來freezing一個PyQt程序還是有點難度的。

這里我們使用一個全新的fbs庫,它可以讓我們輕易的將python源碼轉換成一個執行的PyQt程序。安裝fbs也很簡單,執行下面的命令就OK了:

pip install fbs

接著執行:

fbs startproject

然后你就會看到下面的提示:

Commands for starting a new project with fbs

當你輸入run之后,就會打開一個空的窗口:

An empty window showing 'Hello World!' in its title

這就跟我們之前創建的一個qt程序相似。它會在我們的當前目錄下創建一個文件src/main/python/main.py,然后我們可以試著把它編程一個可執行的文件。

fbs freeze

這個命令就在你當前的目錄的target/MyApp/子目錄有了一個可執行的文件。然后我們就可以把它發送給別人了。

(注意:fbs現在支持Python 3.5 或者 3.6,如果你的版本不是二者之一,同時你的fbs還出現了問題,建議你安裝Python 3.6再試試。)

小獎勵![img]:創建一個安裝包

通過fbs installer命令我們還可以創建安裝包。

img
img

(如果你使用的Windows系統,那么你需要先安裝NSIS,然后配置好環境變量)

線面的一篇文章說明了如何使用fbs,另外你也可以看看fbs教程

文章

fbs 教程

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容