PySide6精簡教程(附圖文!)
一、PySide6概述
近幾年,受益于人工智能的崛起,Python語言幾乎以壓倒性優(yōu)勢在眾多編程語言中異軍突起,成為AI時代的首選語言。在很多情況下,我們想要以圖形化方式將我們的人工智能算法打包提供給用戶使用,這時候選擇以python為主的GUI框架就非常合適了。
QT是眾多GUI框架里面非常著名的一款,它本身由C++開發(fā),天然支持基于C++的GUI編程,編出來的圖形化軟件在當(dāng)今眾多GUI框架中運(yùn)行效率幾乎是天花板級別的,擁有完善的第三方庫,極其適合數(shù)字圖像處理、文檔排版、多媒體、3D建模等專業(yè)軟件開發(fā)。與此同時,QT還有一個強(qiáng)大的功能:支持跨平臺,簡單來理解,就是我們只需要編寫一套代碼就可以同時在windows、mac、linux上運(yùn)行。
值得一提的是,QT對Python也有完善API支持,意味著我們可以規(guī)避C++編程的苦惱,使用更簡潔的Python來代替C++開發(fā)QT應(yīng)用,同樣具備跨平臺等優(yōu)勢。需要說明的是,目前有兩種QT對應(yīng)的Python工具:PySide和PyQt。這里首先介紹下兩者的區(qū)別。
PySide是Qt公司的產(chǎn)品,PyQt是第三方公司的產(chǎn)品,二者用法基本相同,不過在使用協(xié)議上卻有很大差別。PySide可以在LGPL協(xié)議下使用,PyQt則在GPL協(xié)議下使用。這兩個協(xié)議的區(qū)別就是如果使用PyQt,那么你開發(fā)的軟件必須開源,否則就存在被告的風(fēng)險。而PySide就沒有這種約束,不管是開發(fā)商業(yè)閉源軟件還是開源軟件,你都可以不開源代碼,開不開源是你的自由。從這一點(diǎn)上來看,對于商業(yè)公司或者說有商業(yè)考慮的軟件來說,我更傾向于推薦PySide,更何況PySide還是QT的親兒子。雖然PySide和PyQt在協(xié)議上有不同,但是兩者提供的接口幾乎是完全一致的。目前市面上PyQt的教程完全適合PySide,因此,對于學(xué)習(xí)者來說學(xué)習(xí)任何一個都是可以的。
PySide目前常見的有兩個版本:PySide2和PySide6。PySide2由C++版的Qt5開發(fā)而來.,而PySide6對應(yīng)的則是C++版的Qt6。從PySide6開始,PySide的命名也會與Qt的大版本號保持一致,不會再出現(xiàn)類似PySide2對應(yīng)Qt5這種容易混淆的情況。
在使用層面上,PySide2和PySide6無過多的差異,只有一點(diǎn)需要注意,使用PySide6開發(fā)的程序在默認(rèn)情況下不兼容Windows7系統(tǒng),這也是Qt6所決定的(即使是C++的QT6也不支持windows7)。
二、安裝PySide6
對于PySide開發(fā)來說,我們不需要完整的安裝幾個G的Qt,可以像普通Python庫一樣直接通過pip安裝就行,大概占用300MB空間(需要提前安裝好python3以及pip)。
可以使用下面的命令安裝:
pip install --upgrade pip pip install pyside6 -i https://mirror.baidu.com/pypi/simple
通過這樣簡單的命令就可以完成安裝。
基于PySide6開發(fā)GUI程序包含下面三個基本步驟:
- 設(shè)計(jì)GUI,圖形化拖拽或手?jǐn)];
- 響應(yīng)UI的操作(如點(diǎn)擊按鈕、輸入數(shù)據(jù)、服務(wù)器更新),使用信號與Slot連接界面和業(yè)務(wù);
- 打包發(fā)布;
下面我們按照這個步驟來快速實(shí)現(xiàn)一遍。
三、設(shè)計(jì)界面
PySide為我們提供了兩種開發(fā)界面的方式,一種叫QtWidget,是在網(wǎng)上教程中最常見的方式;另一種叫QML,是一種新型的開發(fā)方式,也是Qt正在努力推廣的開發(fā)方式。在本文中,我們主要使用QtWidget這種方式。
使用QtWidget開發(fā)程序時,也有兩種基本的使用方法,一種是通過designer開發(fā)界面,另一種是用代碼手動開發(fā)界面。本文的目的是極簡快速入門,所以使用designer這種方便的方式進(jìn)行開發(fā)。
我們可以在cmd終端中使用下面的命令啟動designer:
pyside6-designer
啟動后designer界面如下所示:
這里我們選擇Widget,并點(diǎn)擊創(chuàng)建,之后打開的界面如下:
讓我們來看一下界面里都有什么:
- 組件選擇區(qū):用來選擇組件,鼠標(biāo)選擇組件后就可以拖拽到窗口界面上,在本教程中會使用到一部分這里的組件;
- 工作區(qū):用來布置界面,調(diào)整窗口,我們可以把工作區(qū)中的窗口隨意拖拽、調(diào)整大??;
- 對象查看區(qū):查看界面上共有多少組件,以及它們的布局關(guān)系;
- 屬性設(shè)置區(qū):設(shè)置組件的屬性,如文本、大小、名稱等;
這里我們先把工作區(qū)中的窗口拖放到中間,再從組件選擇區(qū)里拖拽一個Label組件到窗口上,如下圖所示:
之后我們雙擊窗口里面的Label,輸入“你好啊!世界”,我們會發(fā)現(xiàn)默認(rèn)的Label大小并不能完全展示文本,所以我們把Label的寬度拉長(單擊Label后,拖住周圍的深藍(lán)色方塊即可調(diào)整大?。?,如下圖所示:
接下來我們保存這個界面(Ctrl+S),或者在菜單欄選擇“文件”->“保存”,我們將其保存到桌面一個名為hello的文件夾中,保存命名為hello.ui。
注意,PySide6是不能直接使用ui文件的,我們還需要將其轉(zhuǎn)為py文件。首先cd到hello文件夾中,然后使用命令:
pyside6-uic hello.ui > ui.py
這樣我們就會得到一個ui.py文件,我們可以打開看一下,里面都是一些界面代碼,如下所示:
# -*- coding: utf-8 -*- from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale, QMetaObject, QObject, QPoint, QRect, QSize, QTime, QUrl, Qt) from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor, QFont, QFontDatabase, QGradient, QIcon, QImage, QKeySequence, QLinearGradient, QPainter, QPalette, QPixmap, QRadialGradient, QTransform) from PySide6.QtWidgets import (QApplication, QLabel, QSizePolicy, QWidget) class Ui_Form(object): def setupUi(self, Form): if not Form.objectName(): Form.setObjectName(u"Form") Form.resize(400, 300) self.label = QLabel(Form) self.label.setObjectName(u"label") self.label.setGeometry(QRect(180, 110, 101, 16)) self.retranslateUi(Form) QMetaObject.connectSlotsByName(Form) # setupUi def retranslateUi(self, Form): Form.setWindowTitle(QCoreApplication.translate("Form", u"Form", None)) self.label.setText(QCoreApplication.translate("Form", u"\u4f60\u597d\u554a\uff01\u4e16\u754c\uff01", None)) # retranslateUi
如果不使用designer,那么這個ui.py就需要我們手動來寫,所以,使用designer可以加快開發(fā)速度,減少工作量,提升開發(fā)效率。
這里還要個問題要解決,我們使用命令pyside6-uic轉(zhuǎn)換出來的ui.py文件其保存格式不是utf-8,因此我們要用編輯器將其保存為utf-8才可以,否則后面加載該文件會報錯:
四、響應(yīng)UI操作
接下來我們就要寫代碼來把界面展示出來,新建一個名為hello的py文件:
# 導(dǎo)入sys import sys # 任何一個PySide界面程序都需要使用QApplication # 我們要展示一個普通的窗口,所以需要導(dǎo)入QWidget,用來讓我們自己的類繼承 from PySide6.QtWidgets import QApplication, QWidget # 導(dǎo)入我們生成的界面 from ui import Ui_Form # 繼承QWidget類,以獲取其屬性和方法 class MyWidget(QWidget): def __init__(self): super().__init__() # 設(shè)置界面為我們生成的界面 self.ui = Ui_Form() self.ui.setupUi(self) # 程序入口 if __name__ == "__main__": # 初始化QApplication,界面展示要包含在QApplication初始化之后,結(jié)束之前 app = QApplication(sys.argv) # 初始化并展示我們的界面組件 window = MyWidget() window.show() # 結(jié)束QApplication sys.exit(app.exec_())
注釋中包含了詳細(xì)的代碼說明,接下來我們只要執(zhí)行這個py文件,就可以看到我們的界面了:
五、打包部署
我們最終希望交給用戶是一個純粹的exe可執(zhí)行文件(可以包含一些dll之類的動態(tài)庫或配置文件),用戶不需要安裝Python依賴,直接雙擊就可以運(yùn)行展示。下面我們來實(shí)現(xiàn)最后的這個環(huán)節(jié)。
下面主要以windows為例。
首選安裝打包工具:
pip install pyinstaller -i https://mirror.baidu.com/pypi/simple pip install auto-py-to-exe -i https://mirror.baidu.com/pypi/simple
運(yùn)行:auto-py-to-exe,會自動打開瀏覽器,然后進(jìn)入打包部署配置頁面,如下圖所示:
- Script Location:選擇要打包的py主程序;
- One File:選生成單一文件;
- Console Window:選擇不顯示命令行窗口;
- Icon:可設(shè)置圖標(biāo);
- Additional Files:除了主程序以外其它的需要打包的文件;
- Advanced:可設(shè)置UPX(從這里下載 https://upx.github.io/)然后點(diǎn)擊“Convert .PY to .EXE”就會自動生成.exe文件了,在當(dāng)前目錄output子目錄下。該特性用于進(jìn)一步壓縮exe體積。
最終配置如下所示:
最終在hello文件下會生成output文件夾,其中就生成了打包部署好的exe文件,如下圖所示:
到這里本文就完成了一個簡單的基于PySide6的項(xiàng)目開發(fā)(雖然我們幾乎沒實(shí)現(xiàn)什么功能)。
總結(jié)
到此這篇關(guān)于PySide6精簡教程的文章就介紹到這了,更多相關(guān)PySide6精簡教程內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)基本原理
人工神經(jīng)網(wǎng)絡(luò)(Artificial Neural Networks,簡寫為ANNs)也簡稱為神經(jīng)網(wǎng)絡(luò)(NNs)或稱作連接模型(Connection Model),它是一種模仿動物神經(jīng)網(wǎng)絡(luò)行為特征,進(jìn)行分布式并行信息處理的算法數(shù)學(xué)模型2021-10-10Python 數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解
這篇文章主要介紹了數(shù)據(jù)結(jié)構(gòu)之樹的概念詳解,本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-09-09python pygame實(shí)現(xiàn)擋板彈球游戲
這篇文章主要為大家詳細(xì)介紹了python pygame實(shí)現(xiàn)擋板彈球游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-11-11Python爬蟲之Selenium實(shí)現(xiàn)關(guān)閉瀏覽器
這篇文章主要介紹了Python爬蟲之Selenium實(shí)現(xiàn)關(guān)閉瀏覽器,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12DataFrame.to_excel多次寫入不同Sheet的實(shí)例
今天小編就為大家分享一篇DataFrame.to_excel多次寫入不同Sheet的實(shí)例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-12-12