python wnck gibt erst nach einem pdb.set_trace () Daten zurück
-
27-10-2019 - |
Frage
Unter Ubuntu Linux / Gnome versuche ich, die wnck-Bindung von Python zu verwenden, um eine Liste aller geöffneten Fenster zu erhalten.
Mein Code sieht folgendermaßen aus:
#! /usr/bin/python
from pprint import pprint
import wnck
screen = wnck.screen_get_default()
pprint(screen.get_windows())
import pdb ; pdb.set_trace()
pprint(screen.get_windows())
Die Ausgabe lautet wie folgt:
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowState' as enum when in fact it is of type 'GFlags'
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowActions' as enum when in fact it is of type 'GFlags'
** (windowlist.py:4501): WARNING **: Trying to register gtype 'WnckWindowMoveResizeMask' as enum when in fact it is of type 'GFlags'
[]
> /home/rory/personal/diriu/windowlist.py(12)<module>()
-> pprint(screen.get_windows())
(Pdb) c
[<wnck.Window object at 0xb61db0cc (WnckWindow at 0x992c000)>,
<wnck.Window object at 0xb61db0f4 (WnckWindow at 0x992c0a8)>,
<wnck.Window object at 0xb61db11c (WnckWindow at 0x992c150)>,
<wnck.Window object at 0xb61db144 (WnckWindow at 0x992c1f8)>,
<wnck.Window object at 0xb61db16c (WnckWindow at 0x992c2a0)>,
<wnck.Window object at 0xb61db194 (WnckWindow at 0x992c348)>,
<wnck.Window object at 0xb61db1bc (WnckWindow at 0x992c3f0)>,
<wnck.Window object at 0xb61db1e4 (WnckWindow at 0x992c498)>,
<wnck.Window object at 0xb61db20c (WnckWindow at 0x992c540)>,
<wnck.Window object at 0xb61db234 (WnckWindow at 0x992c5e8)>,
<wnck.Window object at 0xb61db25c (WnckWindow at 0x992c690)>,
<wnck.Window object at 0xb61db284 (WnckWindow at 0x992c738)>]
Der erste get_windows()
-Aufruf gibt []
zurück, eine leere Liste.Der zweite get_windows()
-Aufruf gibt eine Liste der geöffneten Fenster zurück.Im pdb
drücke ich nur c
, um fortzufahren und nichts zu tun (in pdb).
Wenn ich den pdb
auskommentiere, geben die beiden get_windows()
-Aufrufe []
zurück.Wenn ich den get_windows()
-Aufruf viele Male vor der pdb wiederhole, gibt es nichts.Wenn ich den get_windows()
-Aufruf viele Male nach der pdb wiederhole, erhalte ich ständig eine vollständige Liste.
Warum funktioniert dieser Aufruf nur nach einer leeren PDF-Datei?Wie kann ich dafür sorgen, dass es ohne PDF funktioniert?
Lösung
Datei so-wnck.py (von Wie kann ich alle Fenster mit einem bestimmten Wort in ihren Titeln greifen? )
import pygtk
pygtk.require('2.0')
import gtk
import wnck
screen = wnck.screen_get_default()
while gtk.events_pending():
gtk.main_iteration()
windows = screen.get_windows()
print (windows)
python so-wnck.py
** (so-wnck.py:2367): WARNING **: Trying to register gtype 'WnckWindowState' as enum when in fact it is of type 'GFlags' ** (so-wnck.py:2367): WARNING **: Trying to register gtype 'WnckWindowActions' as enum when in fact it is of type 'GFlags' ** (so-wnck.py:2367): WARNING **: Trying to register gtype 'WnckWindowMoveResizeMask' as enum when in fact it is of type 'GFlags' [<wnck.Window object at 0xb7566694 (WnckWindow at 0x97c51f8)>, <wnck.Window object at 0xb75666bc (WnckWindow at 0x97c52a0)>, <wnck.Window object at 0xb75666e4 (WnckWindow at 0x97c5348)>, <wnck.Window object at 0xb756670c (WnckWindow at 0x97c53f0)>, <wnck.Window object at 0xb7566734 (WnckWindow at 0x97c5498)>, <wnck.Window object at 0xb756675c (WnckWindow at 0x97c5540)>, <wnck.Window object at 0xb7566784 (WnckWindow at 0x97c55e8)>]
Andere Tipps
Ich arbeite nicht mit wnck, aber ich denke, dass im Falle einer PDF-Zeit zwischen zwei Aufrufen get_window genug ist, um die Windows-Liste zu initialisieren.Versuchen Sie, den Schlaf mit einer gewissen Verzögerung zu verwenden, bevor Sie get_window aufrufen.