By Toradex秦海
1).?簡介
Python binding?的?Qt GUI?庫一直以來有兩種卖鲤,最初是由?Riverbank Computing?公司在?2000?年初發(fā)布,基于?Qt4?版本推出的?PyQt4,后來隨著?Qt?庫版本的演進也陸續(xù)跟進到?PyQt5?和最新的?PyQt6荠察,由于發(fā)布的比較早其代碼成熟以及文檔完善的也比較早蚤霞,之前我們也寫過?PyQt5?測試的相關(guān)文章,但是?PyQt?的?License?相對比較嚴格安券,是?GPLv3?和?Commercial?兩種墩崩,所以如果是商業(yè)產(chǎn)品開發(fā)使用,不購買?Commercial License?就要開源整個應用侯勉。
基于這種情況鹦筹,Qt官方早至?Nokia?時期的?2009?年就發(fā)布了對應?Pyqt?的?Python binding?項目?PySide,采用?LGPL License?址貌;然后到了?Qt Digia?時期的?2015年盛龄,才發(fā)布了?PySide 1.2.x?版本,對應?Qt4.8.x?版本芳誓;但是由于推出的時間比較晚等原因余舶,Pyside 1.x?的流行度并不太好。接下來?Qt?基于新發(fā)布的?Qt5?版本锹淌,啟動?Qt for Python?項目匿值,最終基于?Qt 5.12.x?發(fā)布了?PySide2,由于支持?LGPL License以及?Qt?官方的支持赂摆,PySide2?逐漸成熟文檔也日趨完善挟憔,接受度也越來越高钟些。然后針對最新的?Qt6?版本,Qt for Python?項目也繼續(xù)從?Qt 6.6?版本開始發(fā)布了最新的?PySide6?版本绊谭,本文就基于?NXP i.MX8M plus處理器平臺簡單測試?PySide6?的部署運行政恍。
本文所演示的平臺來自于?Toradex?Verdin?i.MX8MP?嵌入式平臺。
2.?準備
a).?Verdin i.MX8MP ARM核心版配合Dahlia載板达传,并連接調(diào)試串口和?HDMI?顯示器用于測試篙耗。
3).?Verdin?i.MX8MP?Yocto?Linux?編譯部署
a).?首先參考這里說明創(chuàng)建?Yocto/Openembedded?編譯框架,當前最新版本是對應于?Toradex Yocto Linux BSP 6.x?版本的?kirkstone-6.x.y branch宪赶。
b).?由于默認配置只包含了?meta-qt5 layer宗弯,因此需要參考如下操作將?meta-qt5?替換為 包含?PySide6?支持在內(nèi)的?meta-qt6 layer,本文測試基于?Qt 6.6.x?版本搂妻,可以跟進實際需求改為不低于?Qt 6.6?的版本蒙保。
-------------------------------
###?移除?meta-qt5 layer ###
$ cd <OE_ROOT_PATH>/layers
$ rm -rf meta-qt5
### add meta-qt6 layer ###
$ git clone -b 6.6.3 git://code.qt.io/yocto/meta-qt6.git
### add meta-clang layer for PySide6 ###
$ git clone -b kirkstone?https://github.com/kraj/meta-clang.git
-------------------------------
c).?參考這里文章說明增加?packagegroup-tdx-qt6.bb?和?tdx-reference-multimedia-qt6-image.bb?文件
d).?修改?bblayers.conf?和?local.conf?文件
-------------------------------
### modify bblayer.conf###
--- a/build/conf/bblayers.conf ?2023-03-30 11:13:22.946533642 +0800
+++ b/build/conf/bblayers.conf ?2023-03-28 16:01:12.614534560 +0800
@@ -34,7 +34,7 @@
${TOPDIR}/../layers/meta-openembedded/meta-python \
${TOPDIR}/../layers/meta-freescale-distro \
${TOPDIR}/../layers/meta-toradex-demos \
- ?${TOPDIR}/../layers/meta-qt5 \
+ ?${TOPDIR}/../layers/meta-qt6 \
+ ?${TOPDIR}/../layers/meta-clang\
\
\
${TOPDIR}/../layers/meta-toradex-distro \
### add below to local.conf ###
# remove x11 related
DISTRO_FEATURES:remove = " directfb x11"
#?add python3/python3-pyside6?and Chinese fonts?support
IMAGE_INSTALL:append = " python3 python3-pip python3-pyside6 python3-numpy ttf-droid-sans ttf-droid-sans-fallback ttf-droid-sans-mono ttf-droid-serif freetype"
#?enablegstreamer?for qtmultimedia if needed
PACKAGECONFIG:append:pn-qtmultimedia = " gstreamer"
# add Freescale EULA
ACCEPT_FSL_EULA = "1"
-------------------------------
e).?編譯?YoctoLinux?image
-------------------------------
###compile?Reference-Multimedia?image###
$?MACHINE="verdin-imx8mp"?bitbake?tdx-reference-multimedia-qt6-image
###?compile SDK###
$?MACHINE="verdin-imx8mp"?bitbake?tdx-reference-multimedia-qt6-image?-c populate_sdk
-------------------------------
f).?YoctoLinux?image部署
參考這里通過Toradex?Easy?installer將上面編譯好的image更新部署到模塊
4).?PySide6 Example應用獲取和測試
a).?Qt?官方網(wǎng)站這里提供了豐富的?PySide6 Examples?示例應用,更多開發(fā)指導文檔可以參考如下:
https://doc.qt.io/qtforpython-6.6/index.html
b).?分別使用一個?Qt?Multimedia?應用和一個?Qt?Charts?應用進行測試
./?Qt?Multimedia?應用?–?詳細說明請參考這里欲主,可以從頁面直接下載應用?mediaplayer?文件夾并上傳到Verdin?i.MX8MP Yocto Linux /home/root?目錄
./ Qt?Charts?應用?–?詳細說明請參考這里邓厕,可以從頁面直接下載應用?chartthemes?文件夾并上傳到Verdin?i.MX8MP Yocto Linux /home/root?目錄
c).?創(chuàng)建開機自啟動systemd?service文件
-------------------------------
[Unit]
Description=Start a wayland application
After=weston.service
Requires=weston.service
[Service]
Type=simple
User=root
PAMName=login
Environment=WAYLAND_DISPLAY=/run/wayland-0
Environment=QT_QPA_PLATFORM=wayland-egl
### if is mediaplayer app
ExecStart=python3 /home/root/mediaplayer/mediaplayer.py
### if is chartthemes app
ExecStart=python3 /home/root/chartthemes/main.py
Restart=on-failure
RestartSec=1
[Install]
WantedBy=graphical.target
-------------------------------
d). enable service?并測試
-------------------------------
$?systemctl enable wayland-app-launch
$?reboot
-------------------------------
e).?重啟后分別啟動?mediaplayer?和?chartthemes?應用效果如下
//?注意下如果要使用?mediaplayer?播放視頻文件,由于?QtMultimedia 6.6?版本播放媒體需要調(diào)用?Gstreamer videoconvertscale?元件扁瓢,而這個元件是要?Gstreamer 1.22?版本以上才支持邑狸,如果當前?Yocto?版本中支持的版本過低需要通過單獨升級?Gstreamer?或者整體升級?Yocto?版本來滿足。
5).?總結(jié)
本文基于?NXP i.MX8MP?處理器簡單演示了?PySide6?應用的部署運行涤妒。