2

Python-Clutter で X11 ディスプレイを設定するにはどうすればよいですか? XSCREENSAVER_WINDOW に設定しようとしています。clutter.x11 をインポートして set_display() を使用しようとしましたが、これは正しいコマンドではないようです。これを行う正しい方法を知っている人はいますか?

4

1 に答える 1

0

検索中にこのスレッドを見つけました。アバターの写真を見て、それはあなたのスレッドだと思います ;) LemursDontExistから提供されたコードを再投稿します。


簡単な説明: X Windows でプログラムをスクリーンセーバーにするには、プログラムがスクリーンセーバーとして実行されているかどうか、つまり、ウィンドウ システム自体によって呼び出されたかどうかをチェックします。これは、環境変数DISPLAYが に設定されているかどうかを確認することによって行われXSCREENSAVER_WINDOWます。

その場合、プログラムは全画面表示になり、特定のイベントに反応する必要があります。これはまさに以下のコードが行うことです。この変数の設定は xscreensaver アプリケーションで行います。自分で行う必要はありません。

欠けているビットは、clutter-gtkpython バインディングです。現在の 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 で使用する方法の簡単な概要については (大幅に変更されています)、この例を参照してください。

于 2011-11-27T12:56:18.790 に答える