Wie der Titel sagt, versuche ich, Maus und Tastatur Ereignisse mit Python-GTK zu erfassen.Tastatur/Maus Ereignisse auf dem Desktop/Root-Fenster mit pygtk (gtk.gdk) unter Linux
Ich kann dies mit mit Python-xlib leicht zu tun:
self.display = display.Display()
self.screen = self.display.screen()
self.root_window = self.screen.root
self.root_window.grab_pointer(1,
X.ButtonPressMask | X.ButtonReleaseMask | X.Button1MotionMask,
X.GrabModeAsync,
X.GrabModeAsync,
X.NONE, X.NONE,
X.CurrentTime)
self.root_window.grab_keyboard(1,
X.GrabModeAsync,
X.GrabModeAsync,
X.CurrentTime)
ich die analoge mit gtk.gdk sehen * Funktionen, aber ich kann einfach nicht scheinen Ereignisse auf dem Haupt Desktop-Fenster zu erfassen.. Kann das gemacht werden?
Dies ist, wie ich die Aufgabe zu erfüllen versuchte ... (ALL_EVENTS_MASK war ein Akt der Verzweiflung;])
self.root_window = gtk.gdk.get_default_root_window()
self.root_window.set_events(gtk.gdk.ALL_EVENTS_MASK)
gtk.gdk.event_handler_set(self.filter_callback)
gtk.main()
def filter_callback (self, *args):
print args
Dies ist eine Light-Version des Beispielcodes, den ich bereits hinzugefügt habe. Dies ist auch ein GTK-Fenster. Ich brauche ein gtk.gdk-Fenster ... in diesem Fall den GESAMTEN Desktop, kein einfaches Anwendungsfenster. Mein Problem wäre sonst trivial. – digitalfoo
@lsthree: wo rufst du an, set_events() ??? Es sollte direkt nach dem Erstellen des Widgets in Ihrem Fall gtk.gdk.Window aufgerufen werden !!! – mouad
ah! oops, als ich vorher einen Blick geworfen habe, dachte ich, unsere Namen für die Event-Methode wären gleich. Ich habe den Zusatz gemacht, aber das Problem bleibt bestehen. Beispielsweise können Sie key_press, button_press usw. nicht mit dem Stammverzeichnis des Desktops verbinden. 'self.root_window.set_events (gtk.gdk.ALL_EVENTS_MASK)' gibt mir Ereignisse, wenn ich ein anderes Fenster fokussiere oder wenn ich ein Fenster minimiere/maximiere. Ich muss Tastatur- und Mausereignisse bekommen. – digitalfoo