pyGame в приложении pyGTK

Как лучше всего использовать PyGame (SDL) в приложении PyGTK?

Я ищу метод, который позволяет мне иметь область рисования в окне GTK и в то же время иметь возможность управлять событиями GTK и SDL.


person borrego    schedule 25.08.2008    source источник


Ответы (7)


Я никогда не пробовал это делать сам, но много слышал о других людях, которые пробовали, и это не та дорога, по которой хочется идти.

Существует альтернатива размещению графического интерфейса в самом pygame. Существует множество наборов инструментов графического интерфейса, созданных специально для pygame, которые вы могли бы использовать. Большинство из них незакончены, но есть 2 больших, активно поддерживаемых: PGU и OcempGUI. Полный список на сайте pygame находится здесь.

person dwestbrook    schedule 26.08.2008

Вас может заинтересовать эта ветка сообщений. Похоже, они рекомендуют против этого.

person tslocum    schedule 25.08.2008

PyGame работает намного лучше, когда может управлять своим окном или, что еще лучше, использовать весь экран. GTK имеет достаточно гибких виджетов, позволяющих создавать область рисования.

Эта страница может помочь, если вы хотите попробовать.

person John Douthat    schedule 28.08.2008

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)
person Johan Dahlin    schedule 04.12.2008

Я пытался сделать это сам некоторое время назад, и у меня никогда не получалось, чтобы это работало идеально. На самом деле, я вообще никогда не заставлял его работать под Windows, так как он постоянно давал сбой всей ОС, и у меня кончилось терпение. Я продолжал использовать его, хотя важно было только то, что он работал на Linux и был всего лишь небольшим проектом. Я настоятельно рекомендую вам исследовать альтернативы. Это всегда было похоже на неприятный взлом, и я чувствовал себя грязным.

person Jez    schedule 17.09.2008

Есть простое решение, которое может сработать для вас.

Напишите материалы PyGTK и PyGame как отдельные приложения. Затем из приложения PyGTK вызовите приложение PyGame, используя os.system для вызова приложения PyGame. Если вам нужно обмениваться данными между ними, используйте базу данных, каналы или IPC.

person CyberFonic    schedule 13.10.2008

В проекте Sugar есть несколько Activity, созданных с помощью PyGTK и PyGame.

Для этого они написали библиотеку поддержки, которая называется Sugargame. Вы должны иметь возможность изменить его для обычных приложений PyGTK вместо Sugar.

Вот глава в книге разработчиков Sugar о том, как его использовать.

Библиотека позволяет обмениваться событиями между GTK и PyGame.

Наслаждаться!

person icarito    schedule 08.11.2013