在Tkinter中使用pygame功能(Using pygame features in Tkinter)
我想在我用Tkinter制作的GUI中使用pygame(sprite graphics)中的一些功能。 我知道OcempGUI,但我更愿意坚持使用Tkinter,只是使用pygame中的一些模块。 这是相似的,但不完全相同。 这可能吗? 什么是潜在问题(事件循环)?
I'd like to use some features from pygame (sprite graphics) in my GUI I made in Tkinter. I know of OcempGUI, but I'd prefer to stick to Tkinter, just use some modules from pygame. This is similar but not quite the same. Is this possible at all? What are potential problems (event loop)?
最满意答案
这适用于Linux。 如果幸运的话,它也可能适用于其他操作系统。
import Tkinter as tk import os w, h = 500, 200 # Add a couple widgets. We're going to put pygame in `embed`. root = tk.Tk() embed = tk.Frame(root, width=w, height=h) embed.pack() text = tk.Button(root, text='Blah.') text.pack() # Tell pygame's SDL window which window ID to use os.environ['SDL_WINDOWID'] = str(embed.winfo_id()) # The wxPython wiki says you might need the following line on Windows # (http://wiki.wxpython.org/IntegratingPyGame). #os.environ['SDL_VIDEODRIVER'] = 'windib' # Show the window so it's assigned an ID. root.update() # Usual pygame initialization import pygame as pg pg.display.init() screen = pg.display.set_mode((w,h)) pos = 0 while 1: # Do some pygame stuff screen.fill(pg.Color(0,0,0)) pos = (pos + 1) % screen.get_width() pg.draw.circle(screen, pg.Color(255,255,255), (pos,100), 30) # Update the pygame display pg.display.flip() # Update the Tk display root.update()This works on Linux. If you're lucky, it might work on other operating systems as well.
import Tkinter as tk import os w, h = 500, 200 # Add a couple widgets. We're going to put pygame in `embed`. root = tk.Tk() embed = tk.Frame(root, width=w, height=h) embed.pack() text = tk.Button(root, text='Blah.') text.pack() # Tell pygame's SDL window which window ID to use os.environ['SDL_WINDOWID'] = str(embed.winfo_id()) # The wxPython wiki says you might need the following line on Windows # (http://wiki.wxpython.org/IntegratingPyGame). #os.environ['SDL_VIDEODRIVER'] = 'windib' # Show the window so it's assigned an ID. root.update() # Usual pygame initialization import pygame as pg pg.display.init() screen = pg.display.set_mode((w,h)) pos = 0 while 1: # Do some pygame stuff screen.fill(pg.Color(0,0,0)) pos = (pos + 1) % screen.get_width() pg.draw.circle(screen, pg.Color(255,255,255), (pos,100), 30) # Update the pygame display pg.display.flip() # Update the Tk display root.update()更多推荐
发布评论