[英]My RootWidget(ScreenManager) isn't initializing my program with kivy/python
[英]Kivy: my application isn't hardware accelerated
目前我正在構建一個 Kivy 應用程序來控制打開和關閉儲物櫃的自定義硬件。 為此,我使用 Raspberry Pi 3B+ 以及連接到我的樹莓派的自定義 10" 觸摸屏。我使用的操作系統是 Raspberry Pi OS(32 位)。我已按照所有步驟操作安裝 Kivy 中詳細介紹了安裝 Kivy並因此安裝了預編譯的輪子。一切正常,但似乎我無法讓我的應用程序硬件加速。
當我嘗試運行我的應用程序時,我看到以下內容:
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'3.1 Mesa 20.3.5'>
[INFO ] [GL ] OpenGL vendor <b'Mesa/X.org'>
[INFO ] [GL ] OpenGL renderer <b'llvmpipe (LLVM 11.0.1, 128 bits)'>
[INFO ] [GL ] OpenGL parsed version: 3, 1
[INFO ] [GL ] Shading version <b'1.40'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
根據這個頁面,這意味着我的應用程序沒有硬件加速。 因此,按照那里詳述的步驟,我使用了groups <user>
來檢查我的用戶是否在渲染組中,它是:
<user>: <user> adm dialout cdrom sudo audio video plugdev games users input render netdev spi i2c gpio lpadmin docker
我通過設置 KIVY_GL_BACKEND 和 KIVY_WINDOW 嘗試了幾種組合,但沒有任何效果。 目前我正在使用以下函數來啟動我的應用程序(尚未設置我的環境變量,但將來會這樣做):
def initialize(self):
if os.environ.get('DISPLAY','') == '':
os.environ.__setitem__('DISPLAY', ':0.0')
os.environ['KIVY_GL_BACKEND'] = 'sdl2'
os.environ['KIVY_WINDOW'] = 'sdl2'
並使用以下幾行使我的應用程序最大化:
from kivy.config import Config
Config.set('graphics', 'fullscreen', 'auto')
我怎樣才能使我的應用程序硬件加速?
更新1:
重新安裝了 32 位版本的樹莓派操作系統(帶桌面)。 我已經嘗試安裝所需的庫: sudo apt-get install python3-pip build-essential git python3 python3-dev ffmpeg libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev libportmidi-dev libswscale-dev libavformat-dev libavcodec-dev zlib1g-dev
。 然后我運行python -m pip install "kivy[base]" kivy_examples --no-binary kivy
kivy 從源代碼構建 kivy。 然后我使用sudo apt-get -y remove libsdl2-dev libsdl2-image-dev libsdl2-mixer-dev libsdl2-ttf-dev
SDL2 並按照說明安裝SDL2, SDL2_image, SDL2_mixer, SDL2_ttf
並使用命令sudo ldconfig -v
更新動態庫緩存,再次檢查組並查看我的用戶在渲染組中,然后運行一個簡單的 kivy 應用程序:
import kivy
from kivy.app import App
from kivy.uix.label import Label
class MyApp(App):
def build(self):
return Label(text='Hello world')
if __name__ == '__main__':
MyApp().run()
反過來又向我展示了:
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'3.1 Mesa 20.3.5'>
[INFO ] [GL ] OpenGL vendor <b'Mesa/X.org'>
[INFO ] [GL ] OpenGL renderer <b'llvmpipe (LLVM 11.0.1, 128 bits)'>
[INFO ] [GL ] OpenGL parsed version: 3, 1
[INFO ] [GL ] Shading version <b'1.40'>
[INFO ] [GL ] Texture max size <16384>
[INFO ] [GL ] Texture max units <32>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
更新 2:
sudo raspi-config
[INFO ] [Window ] Provider: sdl2(['window_egl_rpi'] ignored)
[INFO ] [GL ] Using the "OpenGL" graphics system
[INFO ] [GL ] Backend used <sdl2>
[INFO ] [GL ] OpenGL version <b'2.1 Mesa 20.3.5'>
[INFO ] [GL ] OpenGL vendor <b'Broadcom'>
[INFO ] [GL ] OpenGL renderer <b'VC4 V3D 2.1'>
[INFO ] [GL ] OpenGL parsed version: 2, 1
[INFO ] [GL ] Shading version <b'1.20'>
[INFO ] [GL ] Texture max size <2048>
[INFO ] [GL ] Texture max units <16>
[INFO ] [Window ] auto add sdl2 input provider
[INFO ] [Window ] virtual keyboard not allowed, single mode, not docked
如果您想在控制台而不是桌面環境上加速 kivy 應用程序硬件,則需要從源代碼編譯 SDL2。 遵循此說明
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.