2008-08-25 5 views
8

PyGTK 응용 프로그램에서 PyGame (SDL)을 사용하는 가장 좋은 방법은 무엇입니까?pyGTK 응용 프로그램 내의 pyGame

GTK 창에서 그림 영역을 가질 수있을뿐만 아니라 동시에 GTK 및 SDL 이벤트를 관리 할 수있는 방법을 찾고 있습니다.

답변

7

나는 그 자신을 시도한 적이 없지만 시도한 다른 사람들에 관해서는 많이 듣지 만, 내려 가고 싶은 길이 아닙니다.

파이 게임 자체에 gui를 넣는 대안이 있습니다. 당신이 사용할 수있는 파이 게임을 위해 특별히 제작 된 많은 gui 툴킷이 있습니다. 대부분은 다소 미완성이지만, 적극적으로 유지 관리되는 2 개의 큰 것이 있습니다 : PGUOcempGUI. 파이 게임 사이트의 전체 목록은 here입니다.

1

PyGame은 자체 창을 관리 할 수있을 때 더 잘 작동합니다. 또는 전체 화면을 더 좋게 사용할 수 있습니다. GTK는 도면 영역을 생성 할 수있는 충분한 위젯을 가지고 있습니다.

This page 그러나 시도하고 싶다면 도움이 될 수 있습니다.

0

나는이 일을 오래 전부터 시도해 보았으며 완벽하게 작동하지 못했습니다. 실제로 전체 OS가 손상되어 인내심을 잃어 버렸기 때문에 Windows에서 전혀 작동하지 못했습니다. 나는 리눅스에서 계속 실행하는 것이 중요했기 때문에 계속 사용했지만, 단지 작은 프로젝트였습니다. 대안을 조사 할 것을 강력히 권합니다. 항상 더러운 해킹처럼 느껴졌고 나를 더러워지게 만들었습니다.

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와 파이 게임에 내장 된 여러 가지 활동이있다.

그들은 이것을 달성하기 위해 Sugargame이라는 지원 라이브러리를 작성했습니다. Sugar 대신 일반 PyGTK 앱용으로 수정할 수 있어야합니다.

사용 방법은 chapter in Sugar's development book입니다.

lib는 GTK와 PyGame간에 이벤트를 통신 할 수 있습니다.

즐기십시오!

관련 문제