Qt for Python學習筆記—應用程序初探
前言
本文詳細介紹如何在 Window 平臺上用純代碼方式(不借助 Qt Designer 工具)來開發一個簡單的 Qt for Python 入門 GUI 應用程序(含詳細的代碼解析),讓讀者有個基本的感覺,供各位 Qt for Python 的初學者們參考。
注:本系列將會以 PySide6 為例進行介紹,原則上同樣適用于 PyQt6(只需將代碼中導入語句的 PySide6 替換為 PyQt6 即可)。
1. 簡介
既然開發環境已經準備就緒,那就讓我們通過開發一個簡單的示例程序來首次探索它。
本示例程序雖然簡單,但會涉及到如下內容,希望能幫助初學者對使用 PySide6 開發 Python GUI 應用程序代碼框架有個初步的印象。
- 如何導入 PySide6 模塊(或類)
- 如何創建一個應用程序(QApplication)對象
- 如何創建一個標簽(QLabel)對象作為主窗口,并在構造時設置其相關屬性,使用 Qt 樣式表設置標簽屬性。
- 如何設置主窗口(即標簽)標題
- 如何顯示主窗口(即標簽)
- 如何運行應用程序
2. 示例目標及原型
我們確定該應用程序所設想達到的目的,并給出其原型。
一、示例目標:
本示例目標是創建一個 Python GUI 應用程序,其主窗體中(水平和垂直)居中顯示一段藍色的文本信息,隨著窗口的拉伸,該文本大小、顏色保持不變,但其位置仍然在主窗體中保持(水平和垂直)居中。主窗體標題為“PySide6 示例程序”。
二、示例原型:
在進行 GUI 應用程序編碼之前,一般建議先勾畫出 GUI 框架(窗體及各部件的布局等)。本示例原型如下:
3. 示例代碼及運行
一、編輯代碼
利用代碼編輯器編輯示例代碼,并保存為文件(如:C:\MyPySide6\MyPySide6App1.py)。
- from PySide6.QtWidgets import (QApplication, QLabel)
- from PySide6.QtCore import Qt
- app = QApplication([])
- label = QLabel("用 PySide6 開發的第一個 GUI 應用程序!", alignment=Qt.AlignCenter)
- label.setStyleSheet("color: blu e; font: bold; font-size: 15px;")
- label.setWindowTitle("PySide6示例程序1")
- label.show()
- app.exec_()
二、運行程序
從控制臺終端通過命令方式(或直接在 Visual Studio Code 上點擊主窗體上運行按鈕)來運行該示例程序(通常要先進入代碼所在目錄下):
C:\MyPySide6> python MyPySide6App1.py
順利的話應該會出現以下程序窗口(可以試著拉伸一下窗口看看效果):
怎么樣?感覺還不錯吧,簡簡單單8行 Python 代碼,就能生成一個看上去還湊合的 GUI 應用程序了。相信可以大大增強您接下來的 Qt for Python 開發之旅信心吧。
4. 代碼解析
什么?上面的代碼看不懂! 沒關系,我們才剛起步,很多知識還沒學呢。那下面我就對上述代碼進行一個較為詳細的解析,希望能幫助您理解和掌握這些代碼。
(1)首先,導入相關模塊(或類)
- from PySide6.QtWidgets import (QApplication, QLabel)
PySide6 模塊中的子模塊提供對相關 Qt API 的訪問。由于本示例后續代碼中會用到 PySide6.QtWidgets.QApplication 類和 PySide6.QtWidgets.QLabel 類,所以要從 PySide6.QtWidgets 模塊導入 QApplication 類、QLabel 類。
注:還有其他幾種導入方式:
注1:可以根據個人習慣選擇具體的導入方式。本人傾向于選擇最開始的導入方式。
- # 從PySide6.QtWidgets模塊導入所有的類,后續代碼可以直接使用相關類
- from PySide6.QtWidgets import *
- # 導入PySide6.QtWidgets模塊,后續代碼可以直接使用相關類
- import PySide6.QtWidgets
- # 從PySide6庫中導入QtWidgets模塊,后續代碼在使用相關類時,需要加上該類對應的模塊名
- from PySide6 import QtWidgets
(2)其次,創建一個應用程序對象
- app = QApplication( [] )
使用 QApplication 類創建一個應用程序實例對象app,括號內的[]表示構造時不含傳遞參數。
- 注1:QApplication 是管理 Qt GUI 應用程序的控制流程和主要設置的類。任何 Qt GUI 應用程序都必須包含一個 QApplication 類的實例對象。對于非 GUI 的 Qt 應用程序,可以使用 QCoreApplication 類。
- 注2:由于 Qt 可以從命令行接收參數,因此在構造時可以將任何參數傳遞給 QApplication 對象(但要注意需要導入 sys 模塊)
- import sys
- app = QApplication( sys.argv )
(3)接著,創建一個標簽對象作為主窗體
- label = QLabel("用 PySide6 開發的第一個 GUI 應用程序!", alignment=Qt.AlignCenter)
- label.setStyleSheet("color: blue; font: bold; font-size: 15px;")
通常會使用 QMainWindow 類、或 QWidget 類或 QDialog 類來創建一個應用程序的主窗體。本示例中為簡化直接使用 QLabel 類創建一個標簽對象 label 作為本應用程序的主窗體,并在構造時對該標簽的內容和對齊方式進行初始化設置,然后使用 QLabel 類的 setStyleSheet() 方法設置標簽文本的顏色、粗體和字體大小屬性:
- ——文本內容:“用 PySide6 開發的第一個 GUI 應用程序!”
- ——文本位置:(水平和垂直)居中
- ——文本顏色:藍色
- ——字體:粗體
- ——字體大小:15像素
(4)再接著,設置主窗體(即標簽)標題
- label.setWindowTitle("PySide6 示例程序")
調用 QLabel 類的 setWindowTitle() 方法設置主窗體(即標簽)的標題("PySide6 示例程序")。
(5)然后,顯示主窗體(即標簽)
- label.show()
調用 QLabel 類的 show() 方法來顯示主窗體(即標簽)。
(6)最后,運行應用程序
- app.exec_()
執行 QApplication 類的 exec_() 方法,將使得 Qt GUI 進入一個主事件循環,直到程序中調用 exit()、quit() 或關閉應用程序的主窗口時才會結束。
注:在主事件循環開始后,它將會接收用戶界面事件以及其他事件源的事件,并向相應的窗口進行分發和處理。此外,它還完成 Qt 應用程序的初始化和應用程序運行結束后的善后處理,并提供會話管理。
結束語
本系列介紹如何在 Python 中使用 Qt for Python 進行 GUI 應用程序開發。