首页 / 资讯中心 / 文章详情

树莓派4B安装PySide2教程:从虚拟环境到CPU监控GUI实战

树莓派4B安装PySide2教程:从虚拟环境到CPU监控GUI实战 ★ FEATURED ARTICLE
从在树莓派4B上跑一个像样的Python GUI程序开始说起。很多朋友拿到板子第一件事就是照着网上的教程pip install PySide2然后满怀期待地执行结果不是报错就是缺库折腾一晚上窗口都弹不出来。这篇内容就是要把这条路上所有的弯路帮你走完从系统选择、SSH无头配置到虚拟环境创建再到PySide2在ARM平台上的安装逻辑最后用一个完整的CPU监控小工具把整个流程串起来。全文适合树莓派4B新手也适合那些已经在上面装过OpenCV、TensorFlow但一碰GUI就头大的中间玩家——我会把每一步为什么这样做讲清楚。1. 开始之前树莓派4B的系统底子要打牢1.1 硬件与系统版本的选择原则树莓派4B的CPU是BCM2711四核Cortex-A72内存从1GB到8GB都有。如果你打算用PySide2做GUI开发我的建议是至少2GB内存起步4GB或者8GB会更舒服。别小看这一点Qt程序本身吃内存不算猛但你在树莓派上还会同时跑桌面环境、编译器、浏览器调试页面内存小了直接触发OOM界面卡到怀疑人生。系统方面Raspberry Pi OS有两个大的版本分支需要区分清楚桌面版Desktop自带LXDE桌面环境插上显示器就能看到桌面适合需要在板子上直接看GUI效果的场景。Lite版无桌面纯命令行系统适合SSH远程开发、需要自己裁剪桌面的场景。BookwormDebian 122023年底开始的新一代系统默认使用Python 3.11包管理策略和之前Debian 11Bullseye有变化。32位 vs 64位4B完全支持64位系统能用64位就别用32位。PySide2在64位系统下的依赖库更完整编解码性能也更好。我在实际项目中更推荐一个组合64位Bookworm桌面版 命令行远程开发。因为桌面版虽然后台进程多一点但它自带了一堆Qt运行时依赖EGL、GLES、xcb插件等这些恰好是PySide2能不能跑起来的关键。如果你用Lite版后面可能为了补库要花很多时间得不偿失。1.2 无显示器安装把SSH和WiFi预置进去很多人的树莓派买回来就是一块裸板没有显示器没有键盘。这时候要怎么装系统做法是下载Raspberry Pi Imager选择系统镜像后在写入SD卡之前可以通过左下角的高级设置CtrlShiftX直接配置开启SSH服务设置好用户名和密码。配置WiFi填入你家路由器的SSID和密码选择国家为中国CN。不强制要求设置显示器但建议把“默认用户名”从默认的pi改成自己习惯的名字。SD卡烧录完成后插进树莓派上电等一分钟左右用路由器后台或者arp -a找到树莓派的IP地址然后从电脑上执行ssh user树莓派IP地址这里有个经验如果SSH连不上大概率是WiFi没连上别急着怀疑系统坏了。可以在路由器后台看有没有一个陌生的新设备接入或者用网线直连路由器SSH成功概率比WiFi高很多。另外Bookworm版本默认不再允许root账号直接SSH登录用普通用户登录后再sudo就好。1.3 换源与基础依赖的先后顺序系统能登录之后第一件事是更新软件源。国内网络访问官方源很慢需要换到清华或阿里云的树莓派镜像源。Bookworm版本的源配置文件在/etc/apt/sources.list以及/etc/apt/sources.list.d/raspi.list把文件里指向raspbian.raspberrypi.org和老archive.raspberrypi.org的地址替换成mirrors.tuna.tsinghua.edu.cn或mirrors.aliyun.com的对应地址。换源后执行sudo apt update sudo apt upgrade -y然后装上后面会用到的工具链sudo apt install -y build-essential cmake git python3-dev python3-venv sudo apt install -y fonts-noto-cjkfonts-noto-cjk一定要装否则PySide2窗口里的中文全部显示成方块字。这个坑我后面还会专门说。2. Python虚拟环境为什么在树莓派上更要命2.1 全局Python和系统盘的相爱相杀做Python开发的人对虚拟环境都不陌生但在树莓派上这件事比普通PC上重要得多。原因是树莓派OS的系统组件大量依赖系统自带的Python——apt包管理器、raspi-config、桌面环境的许多脚本用的都是/usr/bin/python3。如果你图省事直接在全局环境里pip install xxx很容易出现两种情况pip把某个包的版本升级了结果系统脚本调用时API不兼容轻则raspi-config打不开重则桌面环境起不来。全局site-packages越来越乱你根本分不清哪个包是项目需要的哪个是系统依赖。在树莓派这种性能有限、SD卡空间也不富裕的设备上还有第三层原因全局安装会让环境变得不可复现。你在这块板子上能跑换一块新板子又要从头折腾。用虚拟环境requirements.txt一导新环境分分钟重建。树莓派上的一个特殊点是很多常用的C扩展包比如numpy、opencv在ARM平台上要么没有预编译wheel要么需要大量编译时间。如果你把它们装在虚拟环境里每次新建环境都要重新编译非常耗时。所以我的做法通常是折中的系统的全局环境只装系统需要的包项目的依赖全部放进venv一些特别庞大的、有系统库支持的包用--system-site-packages让venv共享全局site-packages。这个操作后面会讲。2.2 venv、virtualenv和uv到底用哪个Python官方自带的venv模块在3.3之后的版本都能用它是创建虚拟环境最基础的手段。在树莓派上我建议把它作为默认选择。语法很简单python3 -m venv myenvvirtualenv则是第三方工具功能比venv更多支持Python版本指定、系统级包共享等。但在树莓派上如果你用的就是系统自带的Pythonvirtualenv相比venv没有压倒性优势。uv是最近很火的Rust写的Python包管理器创建环境速度极快还能缓存包下载。在树莓派上它的优势是创建虚拟环境几乎瞬间完成uv venv myenv不过要注意的是uv虽然快但它默认创建的虚拟环境还是隔离的PySide2在ARM平台的包源问题并不会因为用了uv就自动解决。所以我的建议是新手老老实实使用python3 -m venv理解虚拟环境的原理想提速的进阶玩家可以试试uv venv但后面针对PySide2的特殊配置逻辑是一样的。为了统一和降低概念负担本文后面的命令都以python3 -m venv为准。2.3 创建并激活项目的第一个虚拟环境假设你的项目目录是~/pyside2-demo进入后执行mkdir -p ~/pyside2-demo cd ~/pyside2-demo python3 -m venv venv source venv/bin/activate激活成功后命令行前面会出现(venv)前缀说明现在你正在使用虚拟环境。此时运行python --version pip --version你会看到Python路径已经指向/home/你的用户名/pyside2-demo/venv/bin/python和系统Python分开了。如果你想验证隔离效果可以先在全局环境里pip list看一下已装的包再在venv里pip list对比会发现venv里几乎是空的。这就是我们要的效果——项目依赖不会污染系统。注意如果你是用Lite版系统可能没有python3-venv包执行python3 -m venv的时候会报错ensurepip is not available需要先执行sudo apt install -y python3-venv。桌面版一般已经装好了。3. PySide2安装这是全流程最容易翻车的一段3.1 为什么pip install PySide2大概率会失败先说结论在Raspberry Pi OS上直接执行pip install PySide2失败的几率非常高。原因是PySide2官方在PyPI上提供的wheel包并没有覆盖Linux ARM平台。你也许会问PySide2不是Qt官方出的吗怎么连树莓派都不支持这里要理解PySide2的分发策略官方PyPI对Linux平台主要发布x86_64和部分i686的wheelARM平台通常只能拿到源码包sdist。当你pip install PySide2时pip下载到源码包后会用setuptools去编译。编译PySide2需要完整的Qt5开发环境、CMake、libclang等一系列工具即使是树莓派4B这种性能还不错的板子完整编译一次也要几个小时而且大概率会卡在找不到libclang或Qt5某个组件上。所以在树莓派上安装PySide2的正确思路不是“硬编译”而是用系统软件源里现成的预编译包。Debian和Raspberry Pi OS的apt源里维护了一套python3-pyside2相关的包它们针对ARM架构做过编译和测试直接安装就能用。3.2 方案A用apt安装系统级PySide2再让venv共享先安装系统级的PySide2sudo apt install -y python3-pyside2这行命令会装上PySide2的核心模块。不过事情到这里还没结束因为PySide2是一堆Qt模块的集合比如QtWidgets在python3-pyside2.qtwidgets这个包里QtCore在python3-pyside2.qtcore里。Debian系的包管理把PySide2拆成了很多子包。为了保险起见建议把常用的模块一起装上sudo apt install -y python3-pyside2.qtwidgets python3-pyside2.qtcore python3-pyside2.qtgui python3-pyside2.qtnetwork如果你用下面的命令验证python3 -c from PySide2.QtWidgets import QApplication; print(OK)在系统全局Python下能通过说明PySide2已经可用。但这时候如果在我们的venv里执行同样的命令会报ModuleNotFoundError: No module named PySide2。原因很简单venv默认隔离了系统site-packagesapt装的PySide2在/usr/lib/python3/dist-packages里venv里面看不到。解决办法有两个方法1创建venv时开启system-site-packages共享cd ~/pyside2-demo deactivate # 如果已经激活了venv先退出 rm -rf venv # 删掉之前的隔离环境 python3 -m venv --system-site-packages venv source venv/bin/activate这样你的venv就能访问系统级安装的PySide2了。对应地如果你用uv创建时可使用uv venv --system-site-packages venv--system-site-packages这个参数是全文最关键的参数之一很多教程不会提但它就是PySide2在树莓派venv里能跑起来的核心前提。方法2在venv里pip安装PySide2不推荐有些时候你希望venv尽量隔离不共享系统包那你也可以尝试在venv里pip install PySide2。先不说编译失败的问题即使你在某些预编译wheel源上找到了PySide2的ARM wheel它对应的Qt库版本也是固定的很容易和系统的GL、EGL、xcb插件版本不匹配跑起来要么闪退要么黑屏。所以我的结论很明确在树莓派上优先用apt安装PySide2然后用--system-site-packages方式创建venv。这是最省心也最稳定的组合。3.3 方案B手动构建或寻找第三方wheel进阶参考如果你的项目必须使用比apt提供的版本更新的PySide2或者你需要的是PySide6而不是PySide2那情况就不一样了。官网不提供ARM wheel这时有两个思路找第三方编译好的wheel比如PiWheels项目专门为树莓派编译Python包。在PiWheels上你可以看到是否有PySide2的ARM wheel如果有直接pip install即可。但PiWheels的编译机器是树莓派性能有限PySide2这种巨型包不一定有。自己交叉编译这需要在一台x86的Linux主机上用qemu-user模拟ARM环境编译或者直接在树莓派上编译。之前我说过直接在树莓派上编译PySide2需要预装大量Qt5 dev库包括qtbase5-dev、qtbase5-dev-tools、libclang-dev等然后执行pip install PySide2 --no-binary PySide2。我在性能不错的4B 8GB上试过一次耗时超过三个小时且中途需要手动解决多处依赖。如果没有特殊需求我不建议普通开发者走这条路。4. 写出并运行你的第一个PySide2窗口程序4.1 最小可运行的Demo代码环境折腾清楚了现在可以写代码了。在项目目录下创建一个hello.pyimport sys from PySide2.QtWidgets import QApplication, QLabel app QApplication(sys.argv) label QLabel(Hello Raspberry Pi PySide2) label.show() sys.exit(app.exec_())然后激活venv并运行source venv/bin/activate python hello.py如果你的树莓派是插着HDMI显示器的应该能看到一个居中显示的标签窗口。如果是在SSH终端下运行大概率会报错qt.qpa.plugin: Could not load the Qt platform plugin xcb in even though it was found.或者could not connect to display这两个错误分别对应两种情况could not connect to display程序需要在显示器/桌面环境中运行但当前进程没有可用的DISPLAY环境变量。xcb plugin加载失败Qt加载xcb平台插件时缺少底层X11库比如libxcb-cursor0、libxcb-icccm4等。解决办法在4.2节详述。4.2 DISPLAY、桌面环境与远程运行的三种模式树莓派上运行PySide2程序至少有三种场景你得分清楚场景一本地桌面运行树莓派直接连接显示器、键鼠桌面环境已启动。在这种场景下打开终端运行python hello.py直接就能看到窗口。只要apt装PySide2时把依赖库装齐了一般不会报错。场景二SSH远程启动GUI如果你从电脑SSH登录树莓派执行GUI程序默认情况下没有DISPLAY变量。这时有两个选择用VNC等远程桌面工具连接到树莓派的桌面环境然后在桌面里开终端运行。这种方式最接近本地体验。使用SSH X11转发从你的电脑上执行ssh -X user树莓派IP然后运行python hello.py窗口会显示在电脑屏幕上。前提是树莓派端需要安装X11转发相关组件电脑端也要有X ServerWindows可以用MobaXterm或WSLgmacOS可以用XQuartz。X11转发模式对网络延迟比较敏感画按钮多的复杂界面会卡顿但用来快速确认程序能不能跑非常方便。场景三无桌面环境用offscreen模式有些玩嵌入式的人用的是Lite版系统根本没有桌面也没有连接显示器。他们想跑GUI程序不是真的要看界面而是想验证逻辑或者用QPainter离线渲染出图片。这种情况下可以设置export QT_QPA_PLATFORMoffscreen python hello.py设置后Qt程序会用一个offscreen的后端代替xcb不需要显示器也能创建QApplication。但因为代码里调用了label.show()这时候不会真正显示窗口程序会正常跑起来也不会报错。如果你只是做单元测试或批量截图这个模式非常有用。4.3 xcb插件加载失败的完整排错链路我见过很多人在树莓派上跑PySide2时卡在Could not load the Qt platform plugin xcb这一步这里给出完整的排查思路而不是直接给一句“你装个libxcb-cursor0就好了”。首先要明白这条报错的含义Qt程序启动时通过平台插件与操作系统图形层交互。在Linux桌面环境里这个平台插件就是libqxcb.so。Qt在加载这个插件时还需要加载一系列X11相关的基础库。如果这些库在系统里缺失Qt会提示xcb插件“found but could not be loaded”。排查链路如下先确认系统桌面环境是否正常运行echo $DISPLAY如果输出类似:0或:1说明当前会话有显示环境。确认xcb插件文件存在在apt安装PySide2后插件目录一般在/usr/lib/arm-linux-gnueabihf/qt5/plugins/platforms/32位或/usr/lib/aarch64-linux-gnu/qt5/plugins/platforms/64位查看里面有没有libqxcb.so。如果文件缺失说明PySide2的platforms插件没装全需要sudo apt install -y python3-pyside2.qtx11extras之类的外围包。用ldd检查依赖是否齐全ldd /usr/lib/arm-linux-gnueabihf/qt5/plugins/platforms/libqxcb.so注意上面的路径以实际为准。ldd会列出所有动态库依赖如果出现not found的文件就说明缺少对应的系统库。根据缺失的库名安装对应apt包。常见的有缺失库安装包libxcb-cursor.so.0libxcb-cursor0libxcb-icccm.so.4libxcb-icccm4libxcb-keysyms.so.1libxcb-keysyms1libxcb-shape.so.0libxcb-shape0libxcb-render-util.so.0libxcb-render-util0最省事的做法是把这些xcb相关库一次性全装上sudo apt install -y libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 libxcb-render-util0装完后再执行python hello.py窗口就能弹出来了。5. 开发全流程串起来一个带按钮和定时器的CPU监控面板单纯的“Hello World”太没意思了我们做一个真正能体现PySide2开发流程的小工具一个显示树莓派CPU温度、频率和运行状态的监控面板。这个小工具涉及PySide2的QTimer定时器、QLabel动态更新、QPushButton事件响应以及一个和硬件信息的交互足够演示完整的开发套路。5.1 前期设计这个工具有什么、怎么交互我习惯在写代码前先想清楚界面长什么样、数据从哪来。界面设计为一个垂直布局的面板顶部一个标题QLabel显示“树莓派CPU监控”。中间三个QLabel分别显示当前CPU温度、CPU频率、运行时长。底部两个按钮一个“立即刷新”一个“自动刷新开关”。自动刷新开启后每个2秒刷新一次数据。数据来源用树莓派的系统接口cat /sys/class/thermal/thermal_zone0/temp温度文件读出来是毫摄氏度比如55000代表55.0摄氏度。CPU频率cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq频率文件读出来是kHz比如1500000代表1500MHz1.5GHz。运行时长用os.getloadavg()获取负载再配合time.time()记录进程经历的时间简单实用。这些系统接口在树莓派上非常稳定比调用第三方库更直接。5.2 核心代码实现下面是完整的代码我加了逐段注释方便你直接抄作业import sys import time from PySide2.QtCore import QTimer, Qt from PySide2.QtWidgets import QApplication, QWidget, QLabel, QPushButton, QVBoxLayout, QHBoxLayout def read_cpu_temp(): 读取CPU温度返回字符串单位摄氏度 try: with open(/sys/class/thermal/thermal_zone0/temp, r) as f: raw int(f.read().strip()) return f{raw / 1000.0:.1f} °C except FileNotFoundError: return N/A def read_cpu_freq(): 读取CPU频率返回字符串单位MHz try: with open(/sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq, r) as f: khz int(f.read().strip()) return f{khz / 1000.0:.0f} MHz except FileNotFoundError: return N/A class MonitorWindow(QWidget): def __init__(self): super().__init__() self.setWindowTitle(树莓派 CPU 监控) self.resize(360, 220) # 创建界面组件 self.title_label QLabel(树莓派 CPU 监控) self.title_label.setAlignment(Qt.AlignCenter) font self.title_label.font() font.setPointSize(16) font.setBold(True) self.title_label.setFont(font) self.temp_label QLabel(温度: --) self.freq_label QLabel(频率: --) self.load_label QLabel(负载: --) self.uptime_label QLabel(已运行: 0 s) self.refresh_btn QPushButton(立即刷新) self.toggle_btn QPushButton(自动刷新: 关闭) # 使用垂直布局 layout QVBoxLayout() layout.addWidget(self.title_label) layout.addWidget(self.temp_label) layout.addWidget(self.freq_label) layout.addWidget(self.load_label) layout.addWidget(self.uptime_label) layout.addWidget(self.refresh_btn) layout.addWidget(self.toggle_btn) self.setLayout(layout) # 信号与槽 self.refresh_btn.clicked.connect(self.update_info) self.toggle_btn.clicked.connect(self.toggle_auto_refresh) # 定时器 self.timer QTimer(self) self.timer.timeout.connect(self.update_info) # 记录启动时间 self.start_time time.time() # 启动时手动刷新一次 self.update_info() def update_info(self): self.temp_label.setText(f温度: {read_cpu_temp()}) self.freq_label.setText(f频率: {read_cpu_freq()}) avg1, avg5, avg15 os_loadavg __import__(os).getloadavg() self.load_label.setText(f负载(1/5/15): {avg1:.2f} / {avg5:.2f} / {avg15:.2f}) elapsed int(time.time() - self.start_time) self.uptime_label.setText(f已运行: {elapsed} s) def toggle_auto_refresh(self): if self.timer.isActive(): self.timer.stop() self.toggle_btn.setText(自动刷新: 关闭) else: self.timer.start(2000) self.toggle_btn.setText(自动刷新: 开启) if __name__ __main__: app QApplication(sys.argv) window MonitorWindow() window.show() sys.exit(app.exec_())把这段代码保存为monitor.py在venv环境下运行python monitor.py窗口应该出现在桌面上点击“立即刷新”能看到温度频率变化点击“自动刷新”后每两秒更新一次。这个小程序麻雀虽小五脏俱全它把PySide2的信号-槽机制、定时器、布局管理这些最核心的知识点都覆盖了后面做更大的项目也是这套框架。5.3 开机自启与部署到板子上的正确姿势开发完这个监控面板你大概率想把程序部署成开机自启的效果就像一个小型工控仪表盘。在树莓派上最简单的方案是用systemd注册一个用户服务而不是往/etc/rc.local里乱塞东西。先创建一个service文件sudo nano /etc/systemd/system/cpu-monitor.service内容如下[Unit] DescriptionCPU Monitor App Aftergraphical.target [Service] User你的用户名 WorkingDirectory/home/你的用户名/pyside2-demo EnvironmentDISPLAY:0 EnvironmentXAUTHORITY/home/你的用户名/.Xauthority ExecStart/home/你的用户名/pyside2-demo/venv/bin/python /home/你的用户名/pyside2-demo/monitor.py Restartalways RestartSec5 [Install] WantedBygraphical.target然后执行sudo systemctl daemon-reload sudo systemctl enable cpu-monitor.service sudo systemctl start cpu-monitor.service注意这里的DISPLAY:0是在树莓派有本地桌面会话的前提下设置的。如果你的树莓派没有启动自动登录桌面而是通过VNC远程连桌面的DISPLAY可能是:1甚至:2需要先确认。最好的验证方式是先手动在桌面终端里运行一次然后执行echo $DISPLAY看输出。还有一点如果你的单位或个人环境不允许开机自启GUI程序比如树莓派以无头服务器方式24小时运行只在需要时连VNC那我不建议用Aftergraphical.target这种方式改成手动启动或者做一个带GUI开关的shell脚本会更灵活。6. 避坑指南汇总这些坑我替你们踩过了6.1 一个真实踩坑案例的完整排错链路前阵子帮朋友在树莓派4B上搭环境他用了最新的Bookworm 64位Lite版系统然后按网上老教程走卡了整整一天。我把排错链路完整复盘一遍这个思路比单独记住某条命令更有价值。他的操作过程是在Lite系统上装完SSH后直接pip install PySide2卡了三次每次都在编译阶段报了ModuleNotFoundError: No module named clang的错。然后他看到报错提示去pip install clang结果又编译了一个多小时最后还是失败。这个问题的本质是PySide2构建时需要libclang这个C库pip版本还没法自动处理。他不是真的缺Python的clang包而是缺libclang-dev和qtbase5-dev。正确的做法是在源码编译之前先确认这些底层的开发库是否齐全sudo apt install -y qtbase5-dev qtbase5-dev-tools libclang-dev libgl1-mesa-dev但即使补齐了这些编译时间依然让人绝望。后来我直接建议他放弃Lite版烧了64位Bookworm桌面版然后sudo apt install -y python3-pyside2 python3-pyside2.qtwidgets python3-pyside2.qtcore python3-pyside2.qtgui python3 -c from PySide2.QtWidgets import QApplication; print(PySide2 OK)几分钟搞定。他问我为什么不用Lite版我说树莓派上做Qt开发桌面版自带的那一整套GL/EGL/X11库是你最需要的隐形资产。为了省那几十MB内存把自己扔进源码编译的泥潭不划算。这个案例给我们的启示是遇到问题先不要急着安装报错提示的那个东西先停下来查一下问题的链条是不是从一开始就走错方向了。6.2 常见错误列表与对照处理错误现象原因处理方式No module named PySide2venv隔离了系统包创建venv时加--system-site-packagesCould not load the Qt platform plugin xcb缺少X11相关库sudo apt install -y libxcb-cursor0 libxcb-icccm4 libxcb-keysyms1 libxcb-shape0 libxcb-render-util0could not connect to display没有DISPLAY环境变量使用桌面终端运行或用VNC、X11转发This application failed to start because no Qt platform plugin could be initializedQt平台插件缺失或库路径不对检查QT_QPA_PLATFORM变量安装python3-pyside2.qtx11extras中文全部是方块缺少中文字体sudo apt install -y fonts-noto-cjkAborted (core dumped)启动瞬间闪退图形硬件加速相关可能是GL库问题尝试设置QT_OPENGLsoftware禁用OpenGL硬件加速ModuleNotFoundError: No module named clang尝试源码编译PySide2时缺少libclang建议放弃编译改用apt安装方案6.3 树莓派上PySide2开发的性能与内存优化习惯树莓派4B的内存虽然最高有8GB但一个SD卡上跑的桌面系统在长时间运行后内存碎片和多出来的缓存会让GUI程序反应变慢。针对PySide2开发我有几个实际操作习惯减少不必要的透明度与特效Qt默认的窗口特效在树莓派的V3D显卡驱动下也算流畅但如果你在界面上用了大量半透明、阴影、GIF动画这几个CPU核心很快就满了。能用纯色背景就不用渐变能用QLabel静态展示就不用QWebEngineView嵌入式设备上的GUI设计原则永远是“够用就好”。使用软渲染兜底当你设置QT_OPENGLsoftware时Qt会使用软件渲染虽然少了GPU加速但对树莓派这种设备来说软件渲染反而能避免一些GPU驱动兼容性引发的黑屏和闪烁。如果程序画面出现残影或窗口卡住可以优先试这个环境变量export QT_OPENGLsoftware用QTimer代替QThread做简单的周期任务很多初学者一上来就开多线程刷新UI反而把问题搞复杂。单纯的定时读取温度频率QTimer在GUI线程里足够用因为读文件操作非常快不会阻塞界面。只有当任务执行可能超过100毫秒比如网络请求、复杂计算时才需要QThread配合信号安全更新UI。6.4 中文显示与字体平滑的小细节树莓派系统自带的英文字体很好用但中文场景下无论你用的是拼音还是中文包都需要额外确认中文字体是否安装。前面我提过fonts-noto-cjk这里再补充一个细节即使字体装了PySide2中QApplication默认字体可能不会自动选择中文字体导致界面里部分控件显示的字体非常难看。可以在创建QApplication后做一次字体设置from PySide2.QtGui import QFont app QApplication(sys.argv) font QFont(Noto Sans CJK SC, 10) app.setFont(font)这样界面里的中文字体就会统一使用思源宋体/黑体系列清晰度提升很明显。另外一些用户会遇到鼠标光标变成大黑方块的问题这不是PySide2的问题是系统缺少xcursor-themes。装上就恢复了sudo apt install -y xcursor-themes这些小细节看着不起眼但在演示和现场运行时对观感的影响非常大。写在最后的一点经验树莓派4B上做PySide2开发真正难的不是Python语法也不是Qt的信号槽——这些在任何一台Linux电脑上都能学会——难的是ARM平台这套环境组合的兼容性。你装了系统Python、又装了venv、再装了PySide2这三者之间的配合任何一个环节错位都会让你怀疑人生。所以我给身边人的建议一直是别急着追求完美的最小化系统先用桌面版把流程跑通把虚拟环境、apt安装PySide2、--system-site-packages这几个关键动作固定下来再考虑优化和裁剪。等你在树莓派上顺利完成了一个带界面的小工具那种成就感是很特别的——一块几十克重的板子从刷系统到跑起自己的GUI程序整个过程本身就是一场非常好的嵌入式Linux实践课。后续如果还有精力你可以试着把这个CPU监控工具接上数据库、加上图表或者改造成一个家庭服务器的状态面板。树莓派的玩法边界远比大多数人想象的要远。
阅读完成 · 觉得有帮助?
咨询建站