树莓派3+PiTFT 3.5屏运行Kivy项目报错:无法找到可用窗口提供者
Kivy在树莓派3+Adafruit PiTFT 3.5寸屏上无法找到Window Provider的问题解决
问题描述
我正在开发一个学校Python项目,使用Kivy为Naomi游戏制作图形界面,目标是集成树莓派3和Adafruit PiTFT 3.5寸屏幕。项目在PC上运行完全正常,但在树莓派上执行时出现错误,核心报错为[CRITICAL] [Window] Unable to find any valuable Window provider。
完整错误日志
pi@raspberrypi:/opt/kivydimmboot $ python3.9 main.py -d [INFO ] [Logger ] Record log in /home/pi/.kivy/logs/kivy_23-03-08_8.txt [INFO ] [Kivy ] v2.1.0 [INFO ] [Kivy ] Installed at "/usr/local/lib/python3.9/site-packages/kivy/__init__.py" [INFO ] [Python ] v3.9.0 (default, Mar 8 2023, 00:35:33) [GCC 8.3.0] [INFO ] [Python ] Interpreter at "/usr/local/bin/python3.9" [INFO ] [Logger ] Purge log fired. Processing... [INFO ] [Logger ] Purge finished! [INFO ] [Factory ] 189 symbols loaded [DEBUG ] [Cache ] register <kv.resourcefind> with limit=None, timeout=60 [DEBUG ] [Cache ] register <kv.lang> with limit=None, timeout=None [DEBUG ] [Cache ] register <kv.image> with limit=None, timeout=60 [DEBUG ] [Cache ] register <kv.atlas> with limit=None, timeout=None [INFO ] [Image ] Providers: img_tex, img_dds, img_sdl2, img_pil (img_ffpyplayer ignored) [DEBUG ] [Cache ] register <kv.texture> with limit=1000, timeout=60 [DEBUG ] [Cache ] register <kv.shader> with limit=1000, timeout=3600 [DEBUG ] [Window ] Ignored <egl_rpi> (import error) [INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored) [DEBUG ] [Window ] Ignored <x11> (import error) [CRITICAL] [Window ] Unable to find any valuable Window provider. Please enable debug logging (e.g. add -d if running from the command line, or change the log level in the config) and re-run your app to identify potential causes egl_rpi - ImportError: cannot import name 'bcm' from 'kivy.lib.vidcore_lite' (/usr/local/lib/python3.9/site-packages/kivy/lib/vidcore_lite/__init__.py) File "/usr/local/lib/python3.9/site-packages/kivy/core/__init__.py", line 59, in core_select_lib mod = importlib.__import__(name='{2}.{0}.{1}'.format( File "<frozen importlib._bootstrap>", line 1109, in __import__ File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked File "<frozen importlib._bootstrap>", line 680, in _load_unlocked File "<frozen importlib._bootstrap_external>", line 790, in exec_module File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed File "/usr/local/lib/python3.9/site-packages/kivy/core/window/window_egl_rpi.py", line 12, in <module> from kivy.lib.vidcore_lite import bcm, egl sdl2 - RuntimeError: b'' File "/usr/local/lib/python3.9/site-packages/kivy/core/__init__.py", line 71, in core_select_lib cls = cls() File "/usr/local/lib/python3.9/site-packages/kivy/core/window/window_sdl2.py", line 165, in __init__ super(WindowSDL, self).__init__() File "/usr/local/lib/python3.9/site-packages/kivy/core/window/__init__.py", line 1071, in __init__ self.create_window() File "/usr/local/lib/python3.9/site-packages/kivy/core/window/window_sdl2.py", line 306, in create_window self.system_size = _size = self._win.setup_window( File "kivy/core/window/_window_sdl2.pyx", line 114, in kivy.core.window._window_sdl2._WindowSDL2Storage.setup_window File "kivy/core/window/_window_sdl2.pyx", line 76, in kivy.core.window._window_sdl2._WindowSDL2Storage.die x11 - ModuleNotFoundError: No module named 'kivy.core.window.window_x11' File "/usr/local/lib/python3.9/site-packages/kivy/core/__init__.py", line 59, in core_select_lib mod = importlib.__import__(name='{2}.{0}.{1}'.format( File "<frozen importlib._bootstrap>", line 1109, in __import__ File "<frozen importlib._bootstrap>", line 1030, in _gcd_import File "<frozen importlib._bootstrap>", line 1007, in _find_and_load File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked [DEBUG ] [Text ] Provider <pango> ignored by config [INFO ] [Text ] Provider: sdl2(['text_pango'] ignored) [INFO ] [KivyMD ] 1.1.1, git-Unknown, 2022-10-13 (installed at "/home/pi/.local/lib/python3.9/site-packages/kivymd/__init__.py") [CRITICAL] [App ] Unable to get a Window, abort.
已尝试的无效配置
在main.py开头添加了以下环境变量,但问题未解决:
# Setup touchscreen os.environ['SDL_VIDEODRIVER']= 'fbcon' os.environ['SDL_FBDEV']= '/dev/fb1' os.environ['SDL_MOUSEDRV'] = 'TSLIB' os.environ["SDL_MOUSEDEV"] = '/dev/input/touchscreen' # for raspberry os.environ['KIVY_WINDOW'] = 'egl_rpi' os.environ['KIVY_GL_BACKEND'] = 'gl'
解决方案
1. 修复Kivy依赖缺失问题
日志显示egl_rpi无法导入bcm,这是因为Kivy 2.1.0在树莓派上的vidcore_lite模块兼容性问题,重新安装适配树莓派的完整依赖:
sudo apt-get update && sudo apt-get install libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev sudo pip3 install kivy[full] --no-binary kivy
2. 调整环境变量配置
切换窗口提供者为sdl2,并完善SDL指向PiTFT的配置,修改main.py开头的环境变量:
import os # 优先使用SDL2作为窗口提供者 os.environ['KIVY_WINDOW'] = 'sdl2' # 配置SDL指向PiTFT屏幕 os.environ['SDL_VIDEODRIVER'] = 'fbcon' os.environ['SDL_FBDEV'] = '/dev/fb1' os.environ['SDL_MOUSEDRV'] = 'TSLIB' os.environ['SDL_MOUSEDEV'] = '/dev/input/touchscreen' # 禁用X11避免干扰 os.environ['DISPLAY'] = ''
3. 验证触摸屏输入配置
确保TSLIB已正确安装并识别触摸屏:
sudo apt-get install tslib libts-bin # 测试触摸屏输入,若有触摸反馈则配置正常 ts_test
如果ts_test无反应,需检查/dev/input/touchscreen路径是否正确,可通过查看/dev/input/下的设备列表确认,必要时重新配置PiTFT驱动。
4. 检查树莓派系统配置
编辑/boot/config.txt,确保启用PiTFT所需的硬件设置:
dtparam=spi=on dtparam=i2c_arm=on dtoverlay=pitft35-resistive,rotate=0,speed=64000000,fps=20
修改后重启树莓派生效。
5. 降级Kivy版本(可选)
若以上方法无效,可尝试降级到对树莓派兼容性更好的Kivy 2.0.0:
pip3 uninstall kivy pip3 install kivy==2.0.0
内容的提问来源于stack exchange,提问作者Mehdi Dounas
相关产品推荐
相关产品推荐

