Использование функций pygame в Tkinter

Я хотел бы использовать некоторые функции из pygame (графика спрайтов) в моем графическом интерфейсе, который я сделал в Tkinter. Я знаю об OcempGUI, но я бы предпочел придерживаться Tkinter, просто используя некоторые модули из pygame. Это похоже, но не совсем то же самое. Это вообще возможно? Каковы потенциальные проблемы (цикл событий)?


person sigma.z.1980    schedule 21.12.2011    source источник


Ответы (1)


Это работает в 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()
person Snowball    schedule 26.12.2011
comment
Только что попробовал это для Windows, и, похоже, он работает нормально (без строки кода, которую вы закомментировали) - person Ben Schwabe; 08.11.2014