
Ποιος είναι ο καλύτερος τρόπος για να χρησιμοποιήσετε pygame (SDL) μέσα σε μια εφαρμογή PyGTK;


Ψάχνω για μια μέθοδο που μου επιτρέπει να έχουν μια περιοχή σχεδίασης στο παράθυρο GTK και την ίδια στιγμή να είναι σε θέση να διαχειριστεί και τις δύο εκδηλώσεις GTK και SDL.

 
pygame σε εφαρμογή PyGTK
========================



Μπορεί να σας ενδιαφέρει σε [αυτό το νήμα μηνυμάτων](http://www.daa.com.au/pipermail/pygtk/2006-September/012888.html) . Φαίνεται σαν να συστήσω εναντίον της.

 

Δεν έχω προσπαθήσει ο ίδιος, αλλά ακούσει πολλά για τους άλλους ανθρώπους που έχω δοκιμάσει, δεν είναι ένας δρόμος που θέλετε να πάει κάτω.


Υπάρχει η εναλλακτική λύση της τοποθέτησης του GUI στην ίδια pygame. Υπάρχουν πολλές gui εργαλείων που χτίστηκε ειδικά για pygame που θα μπορούσατε να χρησιμοποιήσετε. Οι περισσότεροι από αυτούς είναι μάλλον ημιτελής, αλλά υπάρχουν 2 μεγάλα, ενεργά διατηρηθεί αυτά: [PGU](http://www.pygame.org/project/108/) και [OcempGUI](http://www.pygame.org/project/125/) . Ο πλήρης κατάλογος στην ιστοσελίδα pygame είναι [εδώ](http://www.pygame.org/tags/gui) .

 

Pygame λειτουργεί πολύ καλύτερα όταν μπορεί να διαχειριστεί δικό του παράθυρο, ή ακόμα καλύτερα, χρησιμοποιήστε ολόκληρη την οθόνη. GTK έχει αρκετά ευέλικτο widgets για να επιτρέψει τη δημιουργία μιας περιοχής σχεδίασης.


[Αυτή η σελίδα](http://faq.pygtk.org/index.py?req=show&file=faq23.042.htp) μπορεί να βοηθήσει, ωστόσο, αν θέλετε να το δοκιμάσετε.

 

Προσπάθησα να γίνει αυτό τον εαυτό μου πριν από λίγο καιρό, και δεν πήρα ποτέ να λειτουργεί τέλεια. Στην πραγματικότητα ποτέ δεν πήρα για να λειτουργήσω καθόλου σε περιβάλλον Windows, όπως το κράτησε συντριβή ολόκληρο το λειτουργικό σύστημα και έτρεξα έξω από την υπομονή. Συνέχισα να το χρησιμοποιήσει αν και όπως ήταν σημαντικό μόνο έτρεξε σε Linux, και ήταν μόνο ένα μικρό έργο. Θα ήθελα να συστήσω ανεπιφύλακτα να διερευνήσει εναλλακτικές λύσεις. Πάντα ένιωθα σαν μια άσχημη hack, και με έκανε να αισθάνομαι βρώμικα.

 

Υπάρχει μια απλή λύση που θα μπορούσε να λειτουργήσει για σας. 


Γράψτε τα πράγματα PyGTK και pygame πράγματα ως ξεχωριστές εφαρμογές. Στη συνέχεια, από την εφαρμογή PyGTK καλέσει την εφαρμογή pygame, χρησιμοποιώντας os.system να καλέσει την εφαρμογή pygame. Εάν πρέπει να μοιράζονται τα δεδομένα μεταξύ των δύο, στη συνέχεια, είτε να χρησιμοποιήσετε μια βάση δεδομένων, σωλήνες ή IPC.

 

<http://faq.pygtk.org/index.py?file=faq23.042.htp&req=show> όλα αναφέρει:


Θα πρέπει να δημιουργήσετε ένα χώρο σχεδίασης και να ορίσετε τη μεταβλητή SDL\_WINDOWID περιβάλλον αφού είναι συνειδητοποίησα:



```
 os εισαγωγής

 GObject εισαγωγής
 gtk εισαγωγής
 pygame εισαγωγής

 WINX = 400
 Κρασάτο = 200

 παράθυρο = gtk.Window ()
 window.connect ( 'διαγραφή-γεγονός', gtk.main\_quit)
 window.set\_resizable (Λάθος)
 περιοχή = gtk.DrawingArea ()
 area.set\_app\_paintable (True)
 area.set\_size\_request (WINX, κρασάτο)
 window.add (περιοχή)
 area.realize ()

 # Force SDL να γράψει σε περιοχή σχεδίασης μας
 os.putenv ( 'SDL\_WINDOWID', str (area.window.xid))

 # Πρέπει να ξεπλύνετε το βρόχο εκδήλωση Xlib διαφορετικά δεν μπορούμε
 # Πρόσβασης το XWindow οποίο set\_mode () απαιτεί
 gtk.gdk.flush ()

 pygame.init ()
 pygame.display.set\_mode ((WINX, κρασάτο), 0, 0)
 οθόνη = 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 ()

 ενώ gtk.event\_pending ():
 # Pygame / SDL επεξεργασία εκδήλωση πηγαίνει εδώ
 gtk.main\_iteration (Λάθος)

```
 

Το έργο ζάχαρη έχει πολλές δραστηριότητες που χτίστηκε με PyGTK και pygame.


Έγραψαν ένα lib στήριξης για να επιτευχθεί αυτό, που ονομάζεται [Sugargame](http://wiki.sugarlabs.org/go/Development_Team/Sugargame) . Θα πρέπει να είναι σε θέση να το τροποποιήσετε για τις τακτικές εφαρμογές PyGTK αντί για ζάχαρη.


Εδώ είναι ένα [κεφάλαιο στην ανάπτυξη βιβλίο Sugar,](http://georgejhunt.com/olpc/pydebug/ActivityBook/ActivitiesGuideSugar__ActivitiesUsingPyGame.html) για το πώς να το χρησιμοποιήσετε.


Η lib επιτρέπει την επικοινωνία γεγονότα μεταξύ GTK και pygame.


Απολαμβάνω!

 