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 を使用します。