如何在Python-Clutter中设置X11显示?我正在尝试将其设置为XSCREENSAVER_WINDOW。我尝试过导入clutter.x11并使用set_display(),但这似乎不是正确的命令。有人知道做这件事的正确方法吗?
发布于 2011-11-27 20:56:19
在四处搜索时,我找到了this thread,通过查看头像图片,我认为这是您的线程;)我将重新发布LemursDontExist给出的代码,这样您就可以将所有内容整合在一起。
简要说明:为了使程序在X Windows中成为屏幕保护程序,程序会检查它是否作为屏幕保护程序运行,这意味着它是否被窗口系统调用。这可以通过检查环境变量DISPLAY是否设置为XSCREENSAVER_WINDOW来完成。
在这种情况下,程序需要全屏显示,并对某些事件做出反应。这正是下面的代码所做的事情。这个变量的设置是通过xscreensaver应用程序完成的,而不是你自己做的。
您缺少的是clutter-gtk python绑定。在当前的Ubuntu中,包名是gir1.2-clutter-gtk-0.10。这样,您就可以将自定义窗口类与clutter API一起使用。
class GsThemeWindow(gtk.Window):
__gtype_name__ = 'GsThemeWindow'
def __init__(self):
super(GsThemeWindow, self).__init__()
self.connect("destroy", gtk.main_quit)
def do_realize(self):
ident = os.environ.get('XSCREENSAVER_WINDOW')
if not ident is None:
self.window = gtk.gdk.window_foreign_new(int(ident, 16))
self.window.set_events(gtk.gdk.EXPOSURE_MASK |
gtk.gdk.STRUCTURE_MASK)
x, y, w, h, depth = self.window.get_geometry()
self.size_allocate(gtk.gdk.Rectangle(x, y, w, h))
self.set_default_size(w, h)
self.set_decorated(False)
else:
self.window = gtk.gdk.Window(
self.get_parent_window(),
width=self.allocation.width,
height=self.allocation.height,
window_type=gtk.gdk.WINDOW_TOPLEVEL,
wclass=gtk.gdk.INPUT_OUTPUT,
event_mask=self.get_events() | gtk.gdk.EXPOSURE_MASK)
self.window.set_user_data(self)
self.style.attach(self.window)
self.set_flags(self.flags() | gtk.REALIZED)有关如何在python中使用clutter的简短概述(它已经发生了很大变化),请参阅this example
https://stackoverflow.com/questions/4598581
复制相似问题