在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

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

1回复

如何在PyGTK应用程序中更改MenuItem的标签?

我正在用Python编写一个用于Ubuntu的小应用程序指示器。 我需要更改不敏感(禁用)gtk.MenuItem的文本。 我知道这个功能的活生生的例子,这是内置蓝牙指示器中最顶级的项目。
1回复

如何将主题应用于PyGTK应用程序

是否可以在我的PyGTK应用程序中应用此GTK +主题 ? 我可以以编程方式应用主题吗? 即,要应用主题我是否使用PyGTK函数或者我必须在我的机器上找到PyGTK的位置(在Python2.7内)并更改箭头.pngs和滚动条.pngs等? 注意我只安装了PyGTK我没有安装GTK
1回复

PyGTK:无法将文本文件拖放到我的应用程序中

我正在尝试将文本文件查看器配置为通过将文件拖到其上来打开文件。 我看过一些教程并试图模仿它们,但是我的小部件似乎从未收到“ drag_data_received”信号。 在这里,self.topLevel是一个gtk.Window小部件,它是我的应用程序的根目录,这是设置它的代码的最后一部分
1回复

导致ctrl-v粘贴从pygtk应用程序发生到另一个窗口(在Linux中)

我正在使用pygtk,gtk剪贴板和keybinder。 这就是我想要做的。 捕获在另一个Windows文本字段(例如浏览器)中进行的按键 弹出一个gtk应用程序并处理一些用户输入 将结果数据复制到gtk剪贴板 将剪贴板中的数据粘贴到原始窗口的文本字段中
1回复

如何在Windows下将链接拖到PyGTK应用程序?

Evernote客户端有一个很好的功能,允许从Firefox拖动链接到Evernote编辑窗口,该窗口适用于浏览器窗口中的书签和链接。 我想为PyGTK应用程序添加类似的功能。 这是我到目前为止所尝试的(使用Py 2.7.2和PyGTK 2.24.0): 这在Linux下运行良好:您
1回复

PyGTK应用程序无法正确退出

我写了一个小PyGTK应用: Workcycler 现在,我有一个问题,我需要按两次退出按钮才能退出,但我不知道为什么。 我已经对其进行了广泛的测试,并且始终调用所有quit函数,但是该程序在第一次之后就不会关闭。 这是一个很短的脚本,所以有人可以看看吗? 我认为问题可能出在
6回复

如何为PyGTK桌面应用程序连贯地组织模块?

我正在使用PyGTK中的桌面应用程序,似乎遇到了我的文件组织的一些限制。 到目前为止,我以这种方式构建了我的项目: application.py - 保存主应用程序类(大多数功能例程) gui.py - 保持松散耦合的GTK gui实现。 处理信号回调等 comma
1回复

在剪贴板上复制文本时,为什么我的pygtk应用程序崩溃?

我正在使用pygtk编写python应用程序。 我有一个主线程,有时会调用另一个应该建立一个字符串的线程,然后在死之前将其复制到剪贴板上。 我的“从”线程看起来很像这样: 不幸的是,我的应用程序有三分之一的时间崩溃,并显示如下消息: 任何想法? 可能是线程问题吗? 我尝试
2回复

如何在关闭/销毁最后一个窗口后退出pygtk应用程序

有没有办法告诉gtk在应用程序的最后一个打开的窗口被关闭/销毁时自动调用gtk.main_quit() ? 如果没有提供此功能的直接功能,我可以想到以下内容:在窗口的destroy方法中:获取进程中打开窗口的列表,如果它是空的退出。 有办法获得这样的清单吗? 显而易见的解决方案是手
2回复

pygtk中的FileChooserDialog

问题很简单:我只想多次打开FileChooserDialog ,而无需重新创建相同的小部件。 销毁信号/方法不适合我,因为我不想销毁对对象的引用 ,我只需要隐藏FileChooserDialog 问题是,通过此代码,我只获得带有按钮的对话框,但没有其他东西(没有路径,没有文件列表,没