9

PyGTKアプリケーション内でPyGame(SDL)を使用するための最良の方法は何ですか?

GTKウィンドウに描画領域を設定し、同時にGTKイベントとSDLイベントの両方を管理できる方法を探しています。

4

7 に答える 7

7

私は自分で試したことはありませんが、他の人が試した話をよく聞くと、あなたがたどりたい道ではありません.

pygame 自体に gui を配置するという代替手段があります。使用できる pygame 用に特別に作成された GUI ツールキットがたくさんあります。それらのほとんどはかなり未完成ですが、2 つの大きくて積極的に維持されているものがあります: PGUOcempGUIです。pygame サイトの完全なリストはこちらです。

于 2008-08-26T19:36:24.877 に答える
1

このメッセージスレッドに興味があるかもしれません。彼らはそれに反対することをお勧めしているようです。

于 2008-08-25T08:08:46.253 に答える
1

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)
于 2008-12-04T17:52:13.833 に答える
1

PyGame は、独自のウィンドウを管理できる場合、または画面全体を使用できる場合に、はるかにうまく機能します。GTK には、描画領域を作成できる柔軟なウィジェットがあります。

ただし、試してみたい場合は、このページが役立つ場合があります。

于 2008-08-28T10:04:23.190 に答える
0

少し前にこれを自分でやってみましたが、完全に機能することはありませんでした。実際、OS全体をクラッシュさせ続け、我慢できなくなったため、Windowsではまったく動作しませんでした。Linux で動作することだけが重要であり、小さなプロジェクトに過ぎなかったので、私はそれを使い続けました。代替案を検討することを強くお勧めします。それはいつも厄介なハックのように感じられ、私は汚く感じました.

于 2008-09-17T22:45:49.323 に答える
0

あなたのために働くかもしれない簡単な解決策があります。

PyGTK のものと PyGame のものを別々のアプリケーションとして書きます。次に、PyGTK アプリケーションから PyGame アプリケーションを呼び出し、os.system を使用して PyGame アプリケーションを呼び出します。2 つの間でデータを共有する必要がある場合は、データベース、パイプ、または IPC を使用します。

于 2008-10-13T22:38:59.673 に答える