基于 NXP iMX8MP 平台简单测试 PySide6 应用

news2024/10/30 11:49:28

By Toradex秦海

1). 简介

Python binding 的 Qt GUI 库一直以来有两种,最初是由 Riverbank Computing 公司在 2000 年初发布,基于 Qt4 版本推出的 PyQt4,后来随着 Qt 库版本的演进也陆续跟进到 PyQt5 和最新的 PyQt6,由于发布的比较早其代码成熟以及文档完善的也比较早,之前我们也写过 PyQt5 测试的相关文章,但是 PyQt 的 License 相对比较严格,是 GPLv3 和 Commercial 两种,所以如果是商业产品开发使用,不购买 Commercial License 就要开源整个应用。

基于这种情况,Qt官方早至 Nokia 时期的 2009 年就发布了对应 Pyqt 的 Python binding 项目 PySide,采用 LGPL License ;然后到了 Qt Digia 时期的 2015年,才发布了 PySide 1.2.x 版本,对应 Qt4.8.x 版本;但是由于推出的时间比较晚等原因,Pyside 1.x 的流行度并不太好。接下来 Qt 基于新发布的 Qt5 版本,启动 Qt for Python 项目,最终基于 Qt 5.12.x 发布了 PySide2,由于支持 LGPL License以及 Qt 官方的支持,PySide2 逐渐成熟文档也日趋完善,接受度也越来越高。然后针对最新的 Qt6 版本,Qt for Python 项目也继续从 Qt 6.6 版本开始发布了最新的 PySide6 版本,本文就基于 NXP i.MX8M plus处理器平台简单测试 PySide6 的部署运行。

本文所演示的平台来自于 Toradex Verdin i.MX8MP 嵌入式平台。

2. 准备

a). Verdin i.MX8MP ARM核心版配合Dahlia 载板,并连接调试串口和 HDMI 显示器用于测试。

3). Verdin i.MX8MP Yocto Linux 编译部署

a). 首先参考这里说明创建 Yocto/Openembedded 编译框架,当前最新版本是对应于 Toradex Yocto Linux BSP 6.x 版本的 kirkstone-6.x.y branch。

b). 由于默认配置只包含了 meta-qt5 layer,因此需要参考如下操作将 meta-qt5 替换为 包含 PySide6 支持在内的 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"

# enable gstreamer for qtmultimedia if needed

PACKAGECONFIG:append:pn-qtmultimedia = " gstreamer"

# add Freescale EULA

ACCEPT_FSL_EULA = "1"

-------------------------------

e). 编译 Yocto Linux 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). Yocto Linux image部署

参考这里通过Toradex Easy installer将上面编译好的image更新部署到模块

4). PySide6 Example应用获取和测试

a). Qt 官方网站这里提供了丰富的 PySide6 Examples 示例应用,更多开发指导文档可以参考如下:

Qt for Python

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). 创建开机自启动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 应用效果如下

基于 NXP iMX8MP 平台简单测试 PySide6 应用4910.png

基于 NXP iMX8MP 平台简单测试 PySide6 应用4912.png

 

// 注意下如果要使用 mediaplayer 播放视频文件,由于 QtMultimedia 6.6 版本播放媒体需要调用 Gstreamer videoconvertscale 元件,而这个元件是要 Gstreamer 1.22 版本以上才支持,如果当前 Yocto 版本中支持的版本过低需要通过单独升级 Gstreamer 或者整体升级 Yocto 版本来满足。

5). 总结

本文基于 NXP i.MX8MP 处理器简单演示了 PySide6 应用的部署运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2227977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何从iconfont中获取字体图标并应用到微信小程序中去?

下面我们一一个微信小程序的登录界面的制作为例来说明&#xff0c;如何从iconfont中获取字体图标是如何应用到微信小程序中去的。首先我们看效果。 这里所有的图标&#xff0c;都是从iconfont中以字体的形式来加载的&#xff0c;也就是说&#xff0c;我们自始至终没有使用一张…

「Mac畅玩鸿蒙与硬件14」鸿蒙UI组件篇4 - Toggle 和 Checkbox 组件

在鸿蒙开发中,Toggle 和 Checkbox 是常用的交互组件,分别用于实现开关切换和多项选择。Toggle 提供多种类型以适应不同场景,而 Checkbox 支持自定义样式及事件回调。本篇将详细介绍这两个组件的基本用法,并通过实战展示它们的组合应用。 关键词 Toggle 组件Checkbox 组件开…

Axure设计之多级菜单导航教程(中继器)

在数字化时代&#xff0c;优化产品设计&#xff0c;提升用户界面交互&#xff0c;是产品设计着重考虑的点。针对传统菜单导航复杂繁琐的问题&#xff0c;本设计提出了一套灵活的菜单导航方案&#xff0c;结合中继器与动态面板&#xff0c;实现一键搜索、菜单收藏、多级菜单导航…

基于uniapp微信小程序的旅游系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

SpringBoot篇(自动装配原理)

目录 一、自动装配机制 1. 简介 2. 自动装配主要依靠三个核心的关键技术 3. run()方法加载启动类 4. 注解SpringBootApplication包含了多个注解 4.1 SpringBootConfiguration 4.2 ComponentScan 4.3 EnableAutoConfiguration 5. SpringBootApplication一共做了三件事 …

Python 爬虫的寻宝大冒险:如何捕获 API 数据的宝藏

在这个信息爆炸的数字时代&#xff0c;数据就像是隐藏在网络深处的宝藏&#xff0c;等待着勇敢的探险家去发现。今天&#xff0c;我们要讲述的是如何成为一名 Python 爬虫探险家&#xff0c;装备你的代码工具&#xff0c;深入 API 的迷宫&#xff0c;捕获那些珍贵的数据宝藏。 …

blender雕刻基础 笔记

一、教学视频来源 案例5&#xff1a;荧光树桩_雕刻基础_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Bt4y1E7qn/?p18&share_sourcecopy_web&vd_sourced9dc363bbfe0ac72dbaa04823c59231e 二、笔记 1. 启动blender的雕刻模式 启动雕刻模式有两种方式&#x…

NVR小程序接入平台/设备EasyNVR多个NVR同时管理多平台级联与上下级对接的高效应用

政务数据共享平台的建设正致力于消除“信息孤岛”现象&#xff0c;打破“数据烟囱”&#xff0c;实现国家、省、市及区县数据的全面对接与共享。省市平台的“级联对接”工作由多级平台共同构成&#xff0c;旨在满足跨部门、跨层级及跨省数据共享的需求&#xff0c;推动数据流通…

利用Kubernetes原生特性实现简单的灰度发布和蓝绿发布

部分借鉴地址: https://support.huaweicloud.com/intl/zh-cn/bestpractice-cce/cce_bestpractice_10002.html 1.原理介绍 用户通常使用无状态负载 Deployment、有状态负载 StatefulSet等Kubernetes对象来部署业务&#xff0c;每个工作负载管理一组Pod。以Deployment为例&#x…

江协科技STM32学习- P25 UART串口协议

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

【c语言】运算符汇总(万字解析)

&#x1f31f;&#x1f31f;作者主页&#xff1a;ephemerals__ &#x1f31f;&#x1f31f;所属专栏&#xff1a;C语言 目录 前言 一、c语言运算符的分类 二、各运算符的功能及使用 1. 算数运算符 - * / % 2. 位运算符 二进制和进制转换 二进制转十进制 十进制…

使用Python和OpenCV实现火焰检测

使用Python和OpenCV实现火焰检测 项目解释&#xff1a; 此 Python 代码是使用 OpenCV、线程、声音和电子邮件功能的火灾探测系统的简单示例。 以下是它的功能的简单描述&#xff1a; 导入库&#xff1a;代码首先导入必要的库&#xff1a; cv2&#xff1a;用于图像和视频处理…

Flink on yarn模式下,JobManager异常退出问题

这个问题排除了很久&#xff0c;其中更换了Flink版本&#xff0c;也更换了Hadoop版本一直无法解决&#xff0c;JobManager跑着跑着就异常退出了。资源管理器上是提示运行结束&#xff0c;运行状态是被Kill掉。 网上搜了一圈&#xff0c;都说内存不足、资源不足&#xff0c;配置…

第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会在广西桂林开幕

10月19日&#xff0c;第十八届联合国世界旅游组织/亚太旅游协会旅游趋势与展望大会(以下简称“大会”)在广西桂林开幕&#xff0c;来自美国、英国、德国、俄罗斯、柬埔寨等25个国家约120名政府官员、专家学者和旅游业界精英齐聚一堂&#xff0c;围绕“亚洲及太平洋地区旅游业&a…

iOS Swift5算法恢复——HMAC

demangle的时候看到了CryptoSwift&#xff0c;HMAC&#xff0c;于是写一个helloworld&#xff0c;用于对照。 sudo gem install cocoapods pod init pods文件&#xff0c;注意要标注静态链接&#xff1a; # Uncomment the next line to define a global platform for your p…

MacOS/Macbook用户自定义字体安装教程

Mac本自定义字体 示例机型一、下载相关字体文件到本地二、打开启动台三、选择其他四、选择字体册五、添加字体六、选择字体七、安装字体八、安装完成 MacOS官网安装教程 示例机型 系统&#xff1a;MacOS12.6&#xff0c;芯片&#xff1a;M1Pro 一、下载相关字体文件到本地 二…

spyglass关于cdc检测的一处bug

最近在使用22版spyglass的cdc检测功能&#xff0c;发现struct_check的cdc检测实际时存在一些bug的。 构造如下电路&#xff0c;当qualifier和destination信号汇聚时&#xff0c;如果des信号完全将qualifier gate住&#xff0c;sg仍然会报ac_sync。当然此问题可以通过后续funct…

JS | CommonJS、AMD、CMD、ES6-Module、UMD五种JS模块化规范

目录 前言 一、CommonJS 模块化规范 二、ES6 模块化规范 三、AMD 模块化规范 四、CMD 模块化规范 五、UMD模块化规范 前言 这三个规范都是为Js模块化加载而生的&#xff0c;使模块能够按需加载&#xff0c;使系统同庞杂的代码得到组织和管理。模块化的管理代码使多人开发…

c# 值类型

目录 1、c#类型2、值类型2.1 结构体2.2 枚举 1、c#类型 类型&#xff08;Type&#xff09;又叫数据类型&#xff08;Data Type&#xff09;。 A data type is a homogeneous collection of values,effectively prensented,equipped with a set of operations which manipulate…

【YApi】接口管理平台

一、简介 YApi 是一个用于前后端开发团队协作的 API 管理平台&#xff0c;帮助团队更加高效地进行 API 接口的设计、测试、文档管理和版本控制等工作。 YApi 主要功能&#xff1a; API 设计和管理&#xff1a;提供 API 设计和文档生成工具&#xff0c;使开发者能够轻松创建、…