在PyGTK应用程序中使用PyGame(SDL)的最佳方法是什么?

我正在寻找一种方法,允许我在GTK窗口中有一个绘图区域,同时能够管理GTK和SDL事件。

===============>>#1 票数:7

我自己从来没有尝试过这种方式,但是对于其他尝试过的人来说,听到很多,这不是你想要走的路。

还有将gui置于pygame中的替代方案。 有很多专门为pygame构建的gui工具包,你可以使用它们。 他们中的大多数还没有完成,但有两个大的,积极维护的: PGUOcempGUI pygame网站上的完整列表就在这里

===============>>#2 票数:1

您可能对此消息主题感兴趣。 看起来他们推荐反对它。

===============>>#3 票数:1

PyGame在管理自己的窗口时效果更好,甚至可以更好地使用整个屏幕。 GTK具有足够灵活的小部件,可以创建绘图区域。

但是,如果您想尝试, 此页面可能会有所帮助。

===============>>#4 票数: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)

===============>>#5 票数:0

Sugar项目有几个用PyGTK和PyGame构建的活动。

他们写了一个支持库来实现这个目标,称为Sugargame 您应该能够为常规PyGTK应用程序而不是Sugar修改它。

这是Sugar的开发书中有关如何使用它的章节

lib允许在GTK和PyGame之间传递事件。

请享用!

===============>>#6 票数:0

有一个简单的解决方案可能适合您。

将PyGTK内容和PyGame内容编写为单独的应用程序。 然后从PyGTK应用程序调用PyGame应用程序,使用os.system调用PyGame应用程序。 如果您需要在两者之间共享数据,则使用数据库,管道或IPC。

===============>>#7 票数:0

我不久前尝试过这样做,我从来没有让它完美地运作。 实际上我从来没有让它在Windows下工作,因为它一直在崩溃整个操作系统,我没有耐心。 我继续使用它,因为它只在Linux上运行很重要,而且只是一个小项目。 我强烈建议你研究替代方案。 它总是感觉像一个讨厌的黑客,让我觉得很脏。

  ask by borrego translate from so

未解决问题?本站智能推荐: