9

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

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

4

7 回答 7

7

我自己从来没有尝试过,但是听到很多其他人尝试过的消息,这不是你想走的路。

也可以将 gui 放入 pygame 本身。有很多专门为 pygame 构建的 gui 工具包可供您使用。它们中的大多数还没有完成,但有两个大的,积极维护的:PGUOcempGUI。pygame 网站上的完整列表在这里

于 2008-08-26T19:36:24.877 回答
1

当 PyGame 可以管理自己的窗口时,它会更好地工作,甚至更好的是,使用整个屏幕。GTK 具有足够灵活的小部件以允许创建绘图区域。

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

于 2008-08-28T10:04:23.190 回答
1

您可能对此消息线程感兴趣。看起来他们建议反对它。

于 2008-08-25T08:08:46.253 回答
1

http://faq.pygtk.org/index.py?file=faq23.042.htp&req=show提到了这一切:

实现后需要创建绘图区并设置环境变量SDL_WINDOWID:

导入操作系统

 导入对象
 导入gtk
 导入pygame

 WINX = 400
 WINY = 200

 窗口 = gtk.Window()
 window.connect('删除事件', gtk.main_quit)
 window.set_resizable(False)
 面积 = gtk.DrawingArea()
 area.set_app_paintable(真)
 area.set_size_request(WINX,WINY)
 window.add(区域)
 area.realize()

 # 强制 SDL 写入我们的绘图区域
 os.putenv('SDL_WINDOWID', str(area.window.xid))

 # 我们需要刷新 XLib 事件循环,否则我们不能
 # 访问 set_mode() 需要的 XWindow
 gtk.gdk.flush()

 pygame.init()
 pygame.display.set_mode((WINX, WINY), 0, 0)
 屏幕 = 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()

 而 gtk.event_pending():
     # pygame/SDL 事件处理在这里
     gtk.main_iteration(假)
于 2008-12-04T17:52:13.833 回答
0

有一个简单的解决方案可能对您有用。

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

于 2008-10-13T22:38:59.673 回答
0

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

于 2008-09-17T22:45:49.323 回答
0

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

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

这是Sugar 开发书中关于如何使用它的一章。

该库允许在 GTK 和 PyGame 之间进行事件通信。

享受!

于 2013-11-08T13:51:30.673 回答