PyGTKアプリケーション内でPyGame(SDL)を使用するための最良の方法は何ですか?
GTKウィンドウに描画領域を設定し、同時にGTKイベントとSDLイベントの両方を管理できる方法を探しています。
このメッセージスレッドに興味があるかもしれません。彼らはそれに反対することをお勧めしているようです。
http://faq.pygtk.org/index.py?file=faq23.042.htp&req=showはそれをすべて述べています:
描画領域を作成し、実現後に環境変数SDL_WINDOWIDを設定する必要があります。
OSのインポート
gobjectをインポートする
gtkをインポートする
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()
#SDLに描画領域への書き込みを強制する
os.putenv('SDL_WINDOWID'、str(area.window.xid))
#XLibイベントループをフラッシュする必要があります。そうしないと、フラッシュできません。
#set_mode()が必要とするXWindowにアクセスする
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()
一方、gtk.event_pending():
#pygame/SDLイベント処理はここにあります
gtk.main_iteration(False)
PyGame は、独自のウィンドウを管理できる場合、または画面全体を使用できる場合に、はるかにうまく機能します。GTK には、描画領域を作成できる柔軟なウィジェットがあります。
ただし、試してみたい場合は、このページが役立つ場合があります。
少し前にこれを自分でやってみましたが、完全に機能することはありませんでした。実際、OS全体をクラッシュさせ続け、我慢できなくなったため、Windowsではまったく動作しませんでした。Linux で動作することだけが重要であり、小さなプロジェクトに過ぎなかったので、私はそれを使い続けました。代替案を検討することを強くお勧めします。それはいつも厄介なハックのように感じられ、私は汚く感じました.
あなたのために働くかもしれない簡単な解決策があります。
PyGTK のものと PyGame のものを別々のアプリケーションとして書きます。次に、PyGTK アプリケーションから PyGame アプリケーションを呼び出し、os.system を使用して PyGame アプリケーションを呼び出します。2 つの間でデータを共有する必要がある場合は、データベース、パイプ、または IPC を使用します。