2008-08-25 59 views
8

在PyGTK應用程序中使用PyGame(SDL)的最佳方式是什麼?pyGTK應用程序中的pyGame

我正在尋找一種方法,該方法允許我在GTK窗口中具有繪圖區域,並且同時能夠管理GTK和SDL事件。

回答

7

我從來沒有嘗試過自己,但聽過很多關於其他嘗試過的人,這不是你想要走的路。

還有一種將gui放入pygame中的方法。有很多專門爲pygame構建的gui工具包,您可以使用。他們大多數都還沒有完成,但有兩個大的,積極維護的:PGUOcempGUI。 pygame網站上的完整列表是here

1

PyGame可以更好地管理自己的窗口,甚至更好地使用整個屏幕。 GTK具有足夠靈活的小部件以允許創建繪圖區域。

This page雖然,如果你想嘗試它可能會有所幫助。

0

前段時間我嘗試過這樣做,但我從來沒有完全理解它。實際上我從來沒有在Windows下工作,因爲它一直在崩潰整個操作系統,我跑出了耐心。我繼續使用它,因爲它只在Linux上運行很重要,並且只是一個小項目。我強烈建議你調查替代品。它總是感覺像一個討厭的黑客,讓我感到骯髒。

0

有一個簡單的解決方案可能適合你。

將PyGTK的東西和PyGame的東西寫成單獨的應用程序。然後從PyGTK應用程序調用PyGame應用程序,使用os.system調用PyGame應用程序。如果您需要在兩者之間共享數據,則可以使用數據庫,管道或IPC。

1

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) 
0

糖業項目與PyGTK的和pygame的建幾個活動。

他們寫了一個支持庫來實現這個,叫Sugargame。你應該可以修改它而不是Sugar的PyGTK應用程序。

這是關於如何使用它的chapter in Sugar's development book

該庫允許在GTK和PyGame之間進行通信事件。

享受!

相關問題