我试图通过pySDL2将SDL2窗口嵌入到我的Tkinter应用程序中。如何设置pySDL2窗口和渲染器,使渲染或绘图显示在嵌入的框架内?在
其他的例子展示了pygame,但是我发现我的pygame版本目前不能正确地使用SDL2。我知道pygame的其他实现也在尝试实现SDL2,但与SDL2的兼容性对我来说至关重要。在
正确工作的一个例子是Tkinter窗口中的一个框架,该窗口具有一个屏幕,当单击按钮时,通过pysdl2api将某些内容绘制到框架中。 在尝试使用其他地方的pygame解决方案时,我收到了一些不同的错误,包括BadWindow、BadDrawable(与X服务器函数有关)
这方面的例子很难找到,所以希望这个答案能对其他人有所帮助。你需要知道如何在不同的包装器中使用不同的包装器。在某些情况下,API已经过扩展,以避免某些看似神秘的操作。下面提供了一个示例代码,并对其进行了解释。在
上面的例子显示,您可以创建tkinter GUI,然后初始化pySDL2代码,从您想要的任何一个框架或窗口创建一个窗口,在本例中,我选择使用我创建的框架,称为
embed
。使用可用的winfo_id()
函数(请参阅tkinter文档),我们可以获得窗口的句柄。draw()
函数只是使用render模块进行绘图。请注意,对于期望某些类型的SDL2函数,ctypes
被用来以SDL2期望的方式格式化这些参数。在主while循环中,调用sdl_update()
函数将检查SDL事件。然后是根窗口(tkinter)更新调用。 我们创建的Button
的命令链接到draw()
,当您单击此按钮时,SDL2窗口链接的框架中将出现一条随机彩色的线。 此代码改编自This SO answer from PythonNut regarding pygame and tkinter。该代码最初由用户Alex Sallons编写。在相关问题 更多 >
编程相关推荐