Python-Clutter で X11 ディスプレイを設定するにはどうすればよいですか? XSCREENSAVER_WINDOW に設定しようとしています。clutter.x11 をインポートして set_display() を使用しようとしましたが、これは正しいコマンドではないようです。これを行う正しい方法を知っている人はいますか?
1 に答える
検索中にこのスレッドを見つけました。アバターの写真を見て、それはあなたのスレッドだと思います ;) 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)
clutter を Python で使用する方法の簡単な概要については (大幅に変更されています)、この例を参照してください。