2008-08-25 19 views
8

¿Cuál es la mejor manera de usar PyGame (SDL) dentro de una aplicación PyGTK?pyGame dentro de una aplicación pyGTK

Estoy buscando un método que me permita tener un área de dibujo en la ventana GTK y, al mismo tiempo, poder gestionar eventos tanto GTK como SDL.

Respuesta

7

Nunca lo he intentado yo mismo, pero escuchar mucho sobre otras personas que lo han intentado, no es un camino que desee bajar.

Existe la alternativa de poner la interfaz gráfica de usuario en pygame. Hay muchos kits de herramientas gui creados específicamente para pygame que podrías usar. La mayoría de ellos están bastante inacabados, pero hay 2 grandes, activamente mantenidos: PGU y OcempGUI. La lista completa en el sitio de pygame es here.

1

PyGame funciona mucho mejor cuando puede gestionar su propia ventana, o incluso mejor, utilizar toda la pantalla. GTK tiene widgets lo suficientemente flexibles como para permitir la creación de un área de dibujo.

This page pueden ayudar, sin embargo, si quiere probarlo.

0

Intenté hacer esto yo mismo hace un tiempo, y nunca lo hice funcionar perfectamente. En realidad, nunca funcionó en Windows, ya que seguía bloqueando todo el sistema operativo y me quedé sin paciencia. Seguí usándolo, aunque solo era importante que se ejecutara en Linux, y era solo un proyecto pequeño. Recomiendo encarecidamente que investigue alternativas. Siempre se sintió como un hack desagradable, y me hizo sentir sucio.

0

Hay una solución simple que podría funcionar para usted.

Escribe las cosas de PyGTK y PyGame como aplicaciones separadas. Luego, desde la aplicación PyGTK, llame a la aplicación PyGame, utilizando os.system para llamar a la aplicación PyGame. Si necesita compartir datos entre los dos, utilice una base de datos, tuberías o IPC.

1

http://faq.pygtk.org/index.py?file=faq23.042.htp&req=show menciona todo:

lo necesario para crear un área de dibujo y establecer la variable de entorno SDL_WINDOWID después de que se dio cuenta:

 
import os 

import gobject 
import gtk 
import pygame 

WINX = 400 
WINY = 200 

window = gtk.Window() 
window.connect('delete-event', gtk.main_quit) 
window.set_resizable(False) 
area = gtk.DrawingArea() 
area.set_app_paintable(True) 
area.set_size_request(WINX, WINY) 
window.add(area) 
area.realize() 

# Force SDL to write on our drawing area 
os.putenv('SDL_WINDOWID', str(area.window.xid)) 

# We need to flush the XLib event loop otherwise we can't 
# access the XWindow which set_mode() requires 
gtk.gdk.flush() 

pygame.init() 
pygame.display.set_mode((WINX, WINY), 0, 0) 
screen = pygame.display.get_surface() 

image_surface = pygame.image.load('foo.png') 
screen.blit(image_surface, (0, 0)) 

gobject.idle_add(pygame.display.update) 

window.show_all() 

while gtk.event_pending(): 
    # pygame/SDL event processing goes here 
    gtk.main_iteration(False) 
0

El proyecto azúcar tiene varias actividades construidas con PyGTK y PyGame.

Escribieron una lib de soporte para lograr esto, llamado Sugargame. Deberías poder modificarlo para las aplicaciones normales de PyGTK en lugar de Sugar.

Aquí hay un chapter in Sugar's development book acerca de cómo usarlo.

La lib permite comunicar eventos entre GTK y PyGame.

¡Disfrútalo!