2011-01-04 6 views
2

Wie stellt man die X11-Anzeige in Python-Clutter ein? Ich versuche, es auf XSCREENSAVER_WINDOW zu setzen. Ich habe versucht, clutter.x11 zu importieren und set_display() zu verwenden, aber das scheint nicht der richtige Befehl zu sein. Kennt jemand den richtigen Weg?Python Clutter: Anzeige einstellen?

+1

Haben Sie versucht, die DISPLAY-Umgebungsvariable vor dem Ausführen des Skripts oder danach, z 'export DISPLAY = ': 0.0'' oder' os.environ [' DISPLAY '] =': 0.0''? –

+0

Ich bezweifle, dass das funktioniert, da dies ein Bildschirmschoner ist? Wohlgemerkt, ich verstehe das nicht ganz. Will es versuchen. –

Antwort

0

Während der Suche fand ich um this thread, und auf dem Avatar Bild suchen, ich nehme an, es Thread ist;) Ich werde den Code von LemursDontExist gegeben neu schreiben, so dass Sie alles in einem haben.


Kurze Erklärung: Ein Programm einen Bildschirmschoner in X-Windows überprüft das Programm zu machen, wenn es läuft als Bildschirmschoner ist, das heißt, wenn sie vom Windowing-System als solche aufgerufen wurde. Dies wird durchgeführt, indem geprüft wird, ob die Umgebungsvariable DISPLAY auf XSCREENSAVER_WINDOW gesetzt ist.

In diesem Fall muss das Programm im Vollbildmodus ausgeführt werden und auf bestimmte Ereignisse reagieren. Dies ist genau das, was der Code unten tut. Die Einstellung dieser Variable erfolgt über die Anwendung xscreensaver, Sie tun es nicht selbst.

Das Bit, das Sie vermissen, ist die clutter-gtk Pythonbindung. Im aktuellen Ubuntu lautet der Paketname gir1.2-clutter-gtk-0.10. Damit können Sie die benutzerdefinierte Fensterklasse zusammen mit der Clutter-API verwenden.


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) 

Für einen kurzen Überblick darüber, wie Unordnung mit Python verwenden (es hat sich sehr verändert), siehe this example