将Pygame窗口嵌入Tkinter或WxPython框架

将Pygame窗口嵌入Tkinter或WxPython框架,python,tkinter,wxpython,pygame,embed,Python,Tkinter,Wxpython,Pygame,Embed,我和一个朋友在玩pygame游戏。我们希望在tkinter或WxPython框架中嵌入pygame窗口,这样我们就可以包含WX或tkinter支持的文本输入、按钮和下拉菜单。我在互联网上搜寻答案,但我发现所有人都在问同样的问题,没有一个得到很好的回答 将pygame显示器嵌入tkinter或WX框架的最佳方式是什么?(最好是特金特) 这些功能可以与pygame显示器一起使用的任何其他方式也可以使用。以下是一些链接 用于嵌入WxPython 用于嵌入WxPython 用于在Tkinter中嵌入

我和一个朋友在玩pygame游戏。我们希望在tkinter或WxPython框架中嵌入pygame窗口,这样我们就可以包含WX或tkinter支持的文本输入、按钮和下拉菜单。我在互联网上搜寻答案,但我发现所有人都在问同样的问题,没有一个得到很好的回答

将pygame显示器嵌入tkinter或WX框架的最佳方式是什么?(最好是特金特)

这些功能可以与pygame显示器一起使用的任何其他方式也可以使用。

以下是一些链接

  • 用于嵌入WxPython
  • 用于嵌入WxPython
  • 用于在Tkinter中嵌入
基本上,有很多方法

  • 在Linux上,您可以轻松地
    将任何应用程序嵌入到另一个框架中。简单
  • 将Pygame输出直接输出到Python画布
一些研究将提供相关代码。

根据SO问题和公认的答案,最简单的方法是使用SDL画框

此代码是SO用户的工作

只要在非Windows系统上省略
windb
SDL\u视频驱动程序行,此代码是跨平台的。我建议

# [...]
import platform
if platform.system == "Windows":
    os.environ['SDL_VIDEODRIVER'] = 'windib'
# [...]

根据回溯,程序因错误而崩溃。这是由于试图同时在两个不同的线程中访问相同的文件、套接字或类似的资源造成的。在这种情况下,我认为这是线程内屏幕资源的冲突。然而,事实上,这并不是由于两个gui程序的内部问题造成的,这两个gui程序都是自动运行的。这些错误是一个单独的线程调用root.update()的结果,因为主线程已经接管了它,所以不需要这样做。只需在主线程没有调用root.update()时调用线程,就可以停止此操作。

如果您想知道的话,我已经查看了所有这些。然而,没有人能回答这个简单的问题:如何制作一个包含pygame框架的非常基本的窗口。我假设你使用Windows,因为你没有说。WxPython页面上的代码示例(适用于windows)有效吗?如果没有,会发生什么?仅供参考:提供赏金的人不会奖励任何人,除非答案真的很好。是的,我有点猜到了。事实上,我认为,如果我因为一个可怜的答案而获得很多好评,那是不对的。然而,这是唯一的答案。无论如何,我都在尽力帮助你。另外,好吧,有人或其他人已经找到了与你想要的差不多的循环。尝试用
根目录替换最后的循环。在(0,pygame.display.update)
之后。然后我会使用root.mainloop()吗?在主循环中我可能需要做一些其他事情,但我也可以使用root.after。我将尝试此方法,但我不确定root.update将如何导致错误…不,它应该替换它。您可以创建一个调用
pygame.display.update
的函数,并将其传递给
root.after
。我也不清楚
root.update
是如何导致错误的。这很奇怪……我知道这将调用update(以及我可能要调用的任何其他函数),但是,这真的会像调用这些函数一样更新root吗?我承认在wx中设置这样的计时器有更多的经验,但是在wx中,您设置了计时器并启动root.mainloop()。不过我会尝试一些方法。奇怪的是,root.update()会导致问题,但其他一两个页面会提示这一点。因此,root.after似乎会为函数安排一个计时器。但是,这并不能真正取代root.update,除非有办法让它重复重置计时器并定期运行,从而能够使用root.mainloop()
# [...]
import platform
if platform.system == "Windows":
    os.environ['SDL_VIDEODRIVER'] = 'windib'
# [...]