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