 Back in August, I wrote a bit
Back in August, I wrote a bit about how to embed PyGame into a pygtk app (and why it might be interesting to do that). Well, the world has moved on a bit, so today I updated the code sample to work with GObject Introspection. 
It wasn't too hard to do, but did take a bit of digging around. I created a diff between the files and then commented on the diff, so you can see the required changes. 
 === modified file 'game.py'
--- game.py     2011-08-25 12:14:00 +0000
+++ game.py     2012-02-08 10:22:50 +0000
@@ -1,41 +1,41 @@
import pygame
import os
#you can't import Gtk and GObject in the old way
#so delete these imports
-import gobject
-import gtk
#I haven't made quickly prompts work with introspection yet
#I think it will be easy, but in the meantime, we can't use
#quickly.widgets or quickly.prompts
-from quickly import prompts
#here's how to import GObject and Gtk
#you have to import GdkX11 or you can't get a widget's xid
+from gi.repository import GObject
+from gi.repository import Gtk
+from gi.repository import GdkX11
#"gtk" has to be changed to "Gtk" everywhere
#I used find and replace for this
-class GameWindow(gtk.Window):
+class GameWindow(Gtk.Window):
  def __init__(self):
-    gtk.Window.__init__(self)
-    vbox = gtk.VBox(False, 2)
+    Gtk.Window.__init__(self)
+    vbox = Gtk.VBox(False, 2)
    vbox.show()
    self.add(vbox)
    #create the menu
-    file_menu = gtk.Menu()
+    file_menu = Gtk.Menu()
-    accel_group = gtk.AccelGroup()
+    accel_group = Gtk.AccelGroup()
    self.add_accel_group(accel_group)
-    dialog_item = gtk.MenuItem()
+    dialog_item = Gtk.MenuItem()
    dialog_item.set_label("Dialog")
    dialog_item.show()
    dialog_item.connect("activate",self.show_dialog)
    file_menu.append(dialog_item)
    dialog_item.show()
-    quit_item = gtk.MenuItem()
+    quit_item = Gtk.MenuItem()
    quit_item.set_label("Quit")
    quit_item.show()
    quit_item.connect("activate",self.quit)
    file_menu.append(quit_item)
    quit_item.show()
-    menu_bar = gtk.MenuBar()
+    menu_bar = Gtk.MenuBar()
    vbox.pack_start(menu_bar, False, False, 0)
    menu_bar.show()
-    file_item = gtk.MenuItem()
+    file_item = Gtk.MenuItem()
    file_item.set_label("_File")
    file_item.set_use_underline(True)
    file_item.show()
@@ -44,10 +44,10 @@
    menu_bar.append(file_item)
    #create the drawing area
-    da = gtk.DrawingArea()
+    da = Gtk.DrawingArea()
    da.set_size_request(300,300)
    da.show()
-    vbox.pack_end(da)
#pygtk didn't require all of hte arguments for packing
#but Gtk does, so you have to add all the arguments to pack_end here
+    vbox.pack_end(da, False, False, 0)
    da.connect("realize",self._realized)
    #set up the pygame objects
@@ -70,7 +70,15 @@
      self.y += 5
  def show_dialog(self, widget, data=None):
-    prompts.info("A Pygtk Dialog", "See it works easy")
+    #prompts.info("A Pygtk Dialog", "See it works easy")
#I just hand crafted a dialog until I can get quickly.prompts ported
+     title = "PyGame embedded in Gtk Example"
#a lot of the constants work differently
#gtk.DIALOG_MODAL -> Gtk.DialogFlags.Modal
#gtk.RESPONSE_OK -> Gtk.ResponseType.OK
#There's some info here to get started:
#http://live.gnome.org/PyGObject/IntrospectionPorting
#but I found that I had to poke around with ipython a bit to get it right
+     dialog = Gtk.Dialog(title, None, Gtk.DialogFlags.MODAL,(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, Gtk.STOCK_OK, Gtk.ResponseType.OK))
+     content_area = dialog.get_content_area()
+     label = Gtk.Label("See, it still works")
+     label.show()
+     content_area.add(label)
+     response = dialog.run()
+     dialog.destroy()
  def quit(self, widget, data=None):
    self.destroy()
@@ -87,14 +95,14 @@
    return True
  def _realized(self, widget, data=None):
#since I imported GdkX11, I can get the xid
#but note that the properties are now function calls
-    os.putenv('SDL_WINDOWID', str(widget.window.xid))
+    os.putenv('SDL_WINDOWID', str(widget.get_window().get_xid()))    
    pygame.init()
    pygame.display.set_mode((300, 300), 0, 0)
    self.screen = pygame.display.get_surface()
-    gobject.timeout_add(200, self.draw)
+    GObject.timeout_add(200, self.draw)
if __name__ == "__main__":
  window = GameWindow()
-  window.connect("destroy",gtk.main_quit)
+  window.connect("destroy",Gtk.main_quit)
  window.show()
-  gtk.main()
+  Gtk.main()
I pushed the example to launchpad, in case you want to see the whole thing in context.