Python Clutter: установить отображение?

Как настроить отображение X11 в Python-Clutter? Я пытаюсь установить для него значение XSCREENSAVER_WINDOW. Я попытался импортировать clutter.x11 и использовать set_display(), но, похоже, это неправильная команда. Кто-нибудь знает правильный способ сделать это?

1 ответ

Решение

При поиске вокруг я нашел эту ветку и, глядя на картинку аватара, я предполагаю, что это ваша ветка;) Я повторно опубликую код, предоставленный LemursDontExist, так что у вас есть все в одном.


Краткое объяснение: чтобы сделать программу заставкой в ​​X Windows, программа проверяет, работает ли она как заставка, то есть, была ли она вызвана оконной системой как таковой. Это делается путем проверки, если переменная среды DISPLAY установлен в XSCREENSAVER_WINDOW,

В этом случае программа должна перейти в полноэкранный режим и реагировать на определенные события. Это именно то, что делает код ниже. Установка этой переменной выполняется через приложение xscreensaver, вы сами этого не делаете.

Бит, который тебе не хватает, это clutter-gtk привязка к питону В текущей версии 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 (он сильно изменился), смотрите этот пример

Другие вопросы по тегам