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 (он сильно изменился), смотрите этот пример