【问题标题】:Python Clutter: Set display?Python Clutter:设置显示?
【发布时间】:2011-01-04 21:25:25
【问题描述】:

如何在 Python-Clutter 中设置 X11 的显示?我正在尝试将其设置为 XSCREENSAVER_WINDOW。我尝试过导入 clutter.x11 并使用 set_display(),但这似乎不是正确的命令。有谁知道这样做的正确方法?

【问题讨论】:

  • 您是否尝试在运行脚本之前或之后设置 DISPLAY 环境变量,例如export DISPLAY=':0.0'os.environ['DISPLAY'] = ':0.0'?
  • 我怀疑这会起作用,因为这是一个屏幕保护程序?请注意,我不完全理解这一点。会试一试的。

标签: python clutter


【解决方案1】:

在四处搜索时,我找到了this thread,通过查看头像图片,我认为这是您的主题;)我将重新发布LemursDontExist 提供的代码,以便您将所有内容合二为一。


简短的解释:要使程序成为 X Windows 中的屏幕保护程序,程序会检查它是否作为屏幕保护程序运行,这意味着它是否被窗口系统调用。这是通过检查环境变量DISPLAY 是否设置为XSCREENSAVER_WINDOW 来完成的。

在这种情况下,程序需要全屏显示并对某些事件做出反应。这正是下面的代码所做的。设置此变量是通过 xscreensaver 应用程序完成的,您不必自己进行。

您缺少的是clutter-gtk python 绑定。在当前的 Ubuntu 中,包名是gir1.2-clutter-gtk-0.10。这样,您就可以将自定义窗口类与杂乱 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-21
    • 2012-02-18
    • 2013-07-27
    • 1970-01-01
    • 2020-09-03
    • 2011-02-10
    • 1970-01-01
    • 2018-10-15
    相关资源
    最近更新 更多