2008-08-25 32 views
8

Cách tốt nhất để sử dụng PyGame (SDL) trong ứng dụng PyGTK là gì?pyGame trong ứng dụng pyGTK

Tôi đang tìm phương pháp cho phép tôi có vùng vẽ trong cửa sổ GTK và đồng thời có thể quản lý cả các sự kiện GTK và SDL.

Trả lời

7

Tôi chưa bao giờ thử bản thân mình, nhưng nghe rất nhiều về những người khác đã thử, đó không phải là con đường bạn muốn đi xuống.

Có thay thế cho việc đặt gui vào chính pygame. Có rất nhiều bộ công cụ gui được xây dựng đặc biệt cho pygame mà bạn có thể sử dụng. Hầu hết trong số họ là khá chưa hoàn thành, nhưng có 2 lớn, tích cực duy trì những người: PGUOcempGUI. Danh sách đầy đủ trên trang pygame là here.

1

PyGame hoạt động tốt hơn nhiều khi có thể quản lý cửa sổ của riêng nó hoặc thậm chí tốt hơn, sử dụng toàn bộ màn hình. GTK có các tiện ích đủ linh hoạt để cho phép tạo vùng vẽ.

This page có thể trợ giúp, tuy nhiên, nếu bạn muốn dùng thử.

0

Tôi đã cố gắng thực hiện việc này một mình trước đây và tôi chưa bao giờ làm việc đó một cách hoàn hảo. Trên thực tế tôi không bao giờ có nó để làm việc ở tất cả dưới Windows, vì nó giữ crashing toàn bộ hệ điều hành và tôi chạy ra khỏi sự kiên nhẫn. Tôi tiếp tục sử dụng nó mặc dù nó chỉ quan trọng nó chạy trên Linux, và chỉ là một dự án nhỏ. Tôi thực sự khuyên bạn nên điều tra các lựa chọn thay thế. Nó luôn luôn cảm thấy như một hack khó chịu, và làm cho tôi cảm thấy bẩn.

0

Có một giải pháp đơn giản có thể phù hợp với bạn.

Viết nội dung PyGTK và công cụ PyGame dưới dạng ứng dụng riêng biệt. Sau đó, từ ứng dụng PyGTK gọi ứng dụng PyGame, sử dụng os.system để gọi ứng dụng PyGame. Nếu bạn cần chia sẻ dữ liệu giữa hai thì hãy sử dụng cơ sở dữ liệu, đường ống hoặc IPC.

1

http://faq.pygtk.org/index.py?file=faq23.042.htp&req=show đề cập đến nó tất cả:

Bạn cần phải tạo ra một khu vực vẽ và thiết lập các biến môi trường SDL_WINDOWID sau khi nó nhận ra:

 
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

Dự án Đường có nhiều hoạt động xây dựng với PyGTK và Pygame.

Họ đã viết một thư viện hỗ trợ để đạt được điều này, được gọi là Sugargame. Bạn có thể sửa đổi nó cho các ứng dụng PyGTK thông thường thay vì Sugar.

Đây là chapter in Sugar's development book về cách sử dụng.

lib cho phép giao tiếp sự kiện giữa GTK và PyGame.

Tận hưởng!

Các vấn đề liên quan