当前位置: 首页 > 知识库问答 >
问题:

将PyGame窗口嵌入到Tkinter或WxPython框架中

闻人越
2023-03-14

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

什么是最好的方式来实现一个pyplay显示嵌入到tkinter或WX框架?(首选TKinter)

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

共有3个答案

傅朗
2023-03-14

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

司徒墨竹
2023-03-14

这里有一些链接。

  • 在WxPython中嵌入一篇关于pygame的文章。组织
  • 在WxPython中嵌入wxpythonwiki上的文章
  • 要嵌入Tkinter,请参见此问题

基本上,有很多种方法。

  • Linux,您可以轻松地将任何应用程序嵌入另一个框架中。简单。
  • 直接输出到一个WkPython画布

一些研究将提供相关的代码。

滕星纬
2023-03-14

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

这段代码是SO用户Alex Sallons的作品。

import pygame
import Tkinter as tk
from Tkinter import *
import os

root = tk.Tk()
embed = tk.Frame(root, width = 500, height = 500) #creates embed frame for pygame window
embed.grid(columnspan = (600), rowspan = 500) # Adds grid
embed.pack(side = LEFT) #packs window to the left
buttonwin = tk.Frame(root, width = 75, height = 500)
buttonwin.pack(side = LEFT)
os.environ['SDL_WINDOWID'] = str(embed.winfo_id())
os.environ['SDL_VIDEODRIVER'] = 'windib'
screen = pygame.display.set_mode((500,500))
screen.fill(pygame.Color(255,255,255))
pygame.display.init()
pygame.display.update()
def draw():
    pygame.draw.circle(screen, (0,0,0), (250,250), 125)
    pygame.display.update()
    button1 = Button(buttonwin,text = 'Draw',  command=draw)
    button1.pack(side=LEFT)
    root.update()

while True:
    pygame.display.update()
    root.update()      

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

# [...]
import platform
if platform.system == "Windows":
    os.environ['SDL_VIDEODRIVER'] = 'windib'
# [...]
 类似资料:
  • 问题内容: 我和一个朋友正在pygame做游戏。我们希望将pygame窗口嵌入到tkinter或WxPython框架中,以便我们可以包括WX或Tkinter支持的文本输入,按钮和下拉菜单。我搜寻了互联网上的答案,但发现的所有人都在问同样的问题,但都没有一个很好的答案。 实现嵌入到tkinter或WX框架中的pygame显示的最佳方法是什么?(最好是TKinter) 可以在pygame显示器旁边包含

  • 所以我正在用pygame做一个游戏,我也想用tkinter。我在tkinter窗口中嵌入了一个pygame窗口,但我似乎什么都做不了。 对于上下文,以下是完整的代码: 当我使用时,什么都不会发生。在类中使用pyplay是有效的,但是在我更复杂的游戏中,为所有变量使用self.variable似乎是不必要的。 如何在window类之外的pygame窗口中运行代码?

  • 我试图创建一个程序,它有一个tkinter窗口打开,然后当你按下一个按钮,它关闭tkinter窗口,打开一个pyplay窗口。然而,当我点击按钮打开pyplay窗口时,它会打开pyplay窗口,而tkinter窗口保持打开状态。 代码: 我还尝试使用: 我怎样才能解决这个问题?(我正在MacOS 11.1上运行Python 3.7.7)

  • 我已经分别对Tkinter窗口和pygame游戏进行了编码。然而,当我试图将两者联系起来时,游戏将不再有效。 Tkinter窗口用于允许用户输入数据,然后将数据保存到文件中,并在使用pygame制作的游戏中使用。主项目使用pygame制作,Tkinter窗口是一个附加功能。 我已尝试此操作,但接口冻结,因此出现以下错误: 有没有办法在我的pygame循环中嵌入Tkinter事件循环? 注意:这是我

  • 本文向大家介绍emacs 多个窗口或框架,包括了emacs 多个窗口或框架的使用技巧和注意事项,需要的朋友参考一下 示例 Emacs中的“窗口”指的是否则称为“窗格”或“屏幕划分”的内容。一些窗口操作命令包括: 水平分割当前窗口: C-x 2 垂直拆分当前窗口: C-x 3 选择下一个窗口: C-x o 关闭当前窗口: C-x 0 关闭所有其他窗口,但当前窗口除外: C-x 1 Emacs中的“框

  • 我正在使用Pygame模块制作一个简单的游戏。我需要Tkinter窗口与Pygame窗口一起打开。 每当我试图打开两个窗口时,第二个窗口只有在我杀死第一个窗口后才会打开。 现在,我能想到的唯一解决方案是使用多线程。但是,我无法实现它。 我该怎么做呢?我真的很感激这里的帮助。谢谢你!