Python 尝试 "SDL_GetWindowID" 时出错 "expected LP_SDL_Window"
Python error "expected LP_SDL_Window" when trying "SDL_GetWindowID"
我正在尝试获取 SDL window 的 Window ID,以提供给 VLC,以便它可以播放 window 中的视频。
作为 Python 的新手,我隐约意识到这与变量类型转换有关,以便与 SDL 配合使用,并使用正确的 python 绑定...
错误的行是"win_id = SDL_GetWindowID(window)"
这是我的代码;
import sys
import sdl2.ext
import vlc
import ctypes
from sdl2 import *
RESOURCES = sdl2.ext.Resources(__file__, "resources")
sdl2.ext.init()
window = sdl2.ext.Window("Hello World!", size=(640, 480))
window.show()
factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("hello.bmp"))
spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)
vlcInstance = vlc.Instance("--no-xlib")
player = vlcInstance.media_player_new()
win_id = SDL_GetWindowID(window)
player.set_xwindow(win_id)
player.set_mrl("agro.mp4")
player.play()
processor = sdl2.ext.TestEventProcessor()
processor.run(window)
sdl2.ext.quit()
您使用 SDL_GetWindowID 得到的是 SDL 的内部 window ID,它本身在例如事件。你需要的是X11 window ID,可以通过SDL_GetWindowWMInfo获取。然而,这需要一些 SDL 版本控制的技巧,例如(如果 SDL 版本更改但 pysdl2 未更新,我不确定在 python 中调用它是否安全):
wminfo = SDL_SysWMinfo();
SDL_GetVersion(wminfo.version);
if(SDL_GetWindowWMInfo(window.window, wminfo) == 0):
print("can't get SDL WM info");
sys.exit(1);
win_id = wminfo.info.x11.window;
然后用那个win_id
喂给vlc。
我正在尝试获取 SDL window 的 Window ID,以提供给 VLC,以便它可以播放 window 中的视频。
作为 Python 的新手,我隐约意识到这与变量类型转换有关,以便与 SDL 配合使用,并使用正确的 python 绑定...
错误的行是"win_id = SDL_GetWindowID(window)"
这是我的代码;
import sys
import sdl2.ext
import vlc
import ctypes
from sdl2 import *
RESOURCES = sdl2.ext.Resources(__file__, "resources")
sdl2.ext.init()
window = sdl2.ext.Window("Hello World!", size=(640, 480))
window.show()
factory = sdl2.ext.SpriteFactory(sdl2.ext.SOFTWARE)
sprite = factory.from_image(RESOURCES.get_path("hello.bmp"))
spriterenderer = factory.create_sprite_render_system(window)
spriterenderer.render(sprite)
vlcInstance = vlc.Instance("--no-xlib")
player = vlcInstance.media_player_new()
win_id = SDL_GetWindowID(window)
player.set_xwindow(win_id)
player.set_mrl("agro.mp4")
player.play()
processor = sdl2.ext.TestEventProcessor()
processor.run(window)
sdl2.ext.quit()
您使用 SDL_GetWindowID 得到的是 SDL 的内部 window ID,它本身在例如事件。你需要的是X11 window ID,可以通过SDL_GetWindowWMInfo获取。然而,这需要一些 SDL 版本控制的技巧,例如(如果 SDL 版本更改但 pysdl2 未更新,我不确定在 python 中调用它是否安全):
wminfo = SDL_SysWMinfo();
SDL_GetVersion(wminfo.version);
if(SDL_GetWindowWMInfo(window.window, wminfo) == 0):
print("can't get SDL WM info");
sys.exit(1);
win_id = wminfo.info.x11.window;
然后用那个win_id
喂给vlc。