2008-08-25 18 views
8

Quelle est la meilleure façon d'utiliser PyGame (SDL) dans une application PyGTK?pyGame dans une application pyGTK

Je suis à la recherche d'une méthode qui me permet d'avoir une zone de dessin dans la fenêtre GTK et en même temps de gérer les événements GTK et SDL.

Répondre

7

Je ne l'ai jamais essayé moi-même, mais en entendant beaucoup d'autres personnes qui ont essayé, ce n'est pas une route que vous voulez descendre.

Il y a l'alternative de mettre le gui dans pygame lui-même. Il y a beaucoup de boîtes à outils gui construites spécifiquement pour pygame que vous pourriez utiliser. La plupart d'entre eux sont plutôt inachevés, mais il y en a 2 grands, activement maintenus: PGU et OcempGUI. La liste complète sur le site de pygame est here.

1

PyGame fonctionne beaucoup mieux lorsqu'il peut gérer sa propre fenêtre, ou mieux encore, utiliser tout l'écran. GTK dispose de widgets suffisamment flexibles pour permettre la création d'une zone de dessin.

This page peut aider, cependant, si vous voulez l'essayer.

0

J'ai essayé de le faire moi-même il y a un certain temps, et je n'ai jamais réussi à le faire fonctionner parfaitement. En fait, je ne l'ai jamais eu du tout sous Windows, car il continuait à planter tout le système d'exploitation et je manquais de patience. J'ai continué à l'utiliser cependant car il était seulement important qu'il fonctionne sur Linux, et n'était qu'un petit projet. Je vous recommande fortement d'étudier des alternatives. Cela m'a toujours paru comme un vilain hack et m'a fait me sentir sale.

0

Il existe une solution simple qui pourrait fonctionner pour vous. Ecrivez les trucs PyGTK et PyGame en tant qu'applications séparées. Ensuite, à partir de l'application PyGTK, appelez l'application PyGame, en utilisant os.system pour appeler l'application PyGame. Si vous devez partager des données entre les deux, utilisez une base de données, des tuyaux ou un IPC.

1

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

Vous devez créer une zone de dessin et définir l'environnement SDL_WINDOWID variable après qu'il a réalisé:

 
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

Le projet sucre a plusieurs activités construites avec PyGTK et PyGame.

Ils ont écrit un support lib pour y parvenir, appelé Sugargame. Vous devriez pouvoir le modifier pour les applications PyGTK normales au lieu de Sugar.

Voici un chapter in Sugar's development book sur la façon de l'utiliser.

La bibliothèque lib permet de communiquer des événements entre GTK et PyGame.

Profitez-en!