PyGTKアプリケーション内でPyGame(SDL)を使用する最も良い方法は何ですか?pyGTKアプリケーション内のpyGame
私は、GTKウィンドウに描画領域を持ち、同時にGTKとSDLの両方のイベントを管理できるメソッドを探しています。
PyGTKアプリケーション内でPyGame(SDL)を使用する最も良い方法は何ですか?pyGTKアプリケーション内のpyGame
私は、GTKウィンドウに描画領域を持ち、同時にGTKとSDLの両方のイベントを管理できるメソッドを探しています。
this message threadに興味があるかもしれません。彼らはそれに反対するように見えます。
PyGameは、独自のウィンドウを管理することができ、さらには画面全体を使用することができます。 GTKには、描画領域の作成を可能にする柔軟なウィジェットがあります。
This pageでも、試してみてください。
私はこれを少し前にやってみましたが、完璧に動作することはありませんでした。実際には、OS全体をクラッシュさせてしまい、忍耐を使い果たしてしまったので、Windowsで動作することはありませんでした。私はそれを使用し続けましたが、それはLinux上で実行されたことだけが重要であったため、小さなプロジェクトでした。代替案を検討することを強くお勧めします。それはいつも不快なハックのように感じられ、私は汚い気分にさせた。
あなたに適した簡単な解決策があります。
PyGTK stuffとPyGame stuffを別々のアプリケーションとして記述してください。次に、PyGTKアプリケーションからPyGameアプリケーションを呼び出し、os.systemを使用してPyGameアプリケーションを呼び出します。 2つの間でデータを共有する必要がある場合は、データベース、パイプまたはIPCを使用します。
http://faq.pygtk.org/index.py?file=faq23.042.htp&req=showはすべてそれを言及:それは実現しています後
あなたは描画領域を作成し、環境変数SDL_WINDOWIDを設定する必要があります。
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)
シュガープロジェクトはPyGTKをとpygameのダウンロードで構築されたいくつかの活動があります。
これを達成するために、彼らはSugargameと呼ばれるサポートライブラリを作成しました。あなたはSugarの代わりに通常のPyGTKアプリのためにそれを変更できるはずです。
使用方法についてはchapter in Sugar's development bookです。
libは、GTKとPyGameの間でイベントをやりとりすることができます。
お楽しみください!