Come ottenere la lista delle finestre aperte in PyGTK o GTK o in altri linguaggi di programmazione? in Ubuntu?Come ottenere la lista delle finestre aperte in PyGTK o GTK in Ubuntu?
edit:
voglio ottenere percorsi Lista directory aperte sul desktop!
Come ottenere la lista delle finestre aperte in PyGTK o GTK o in altri linguaggi di programmazione? in Ubuntu?Come ottenere la lista delle finestre aperte in PyGTK o GTK in Ubuntu?
edit:
voglio ottenere percorsi Lista directory aperte sul desktop!
probabilmente si desidera utilizzare libwnck:
http://library.gnome.org/devel/libwnck/stable/
Credo che ci siano binding Python in python-gnome o qualche pacchetto simile.
volta che hai la GTK + mainloop esecuzione, è possibile effettuare le seguenti operazioni:
import wnck window_list = wnck.screen_get_default().get_windows()
Alcuni metodi interessanti su una finestra da quella lista sono get_name() e attivare().
Questo stamperà i nomi delle finestre sulla console quando si fa clic sul pulsante. Ma per qualche ragione ho dovuto fare clic sul pulsante due volte. Questa è la mia prima volta che utilizzo libwnck, quindi probabilmente mi manchi qualcosa. :-)
import pygtk pygtk.require('2.0') import gtk, wnck class WindowLister: def on_btn_click(self, widget, data=None): window_list = wnck.screen_get_default().get_windows() if len(window_list) == 0: print "No Windows Found" for win in window_list: print win.get_name() def __init__(self): self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.button = gtk.Button("List Windows") self.button.connect("clicked", self.on_btn_click, None) self.window.add(self.button) self.window.show_all() def main(self): gtk.main() if __name__ == "__main__": lister = WindowLister() lister.main()
gtk.gdk.window_get_toplevels()
La funzione
gtk.gdk.window_get_toplevels()
restituisce un elenco di tutte le finestre principali noti per PyGTK sullo schermo predefinita. Una finestra di livello superiore è un elemento figlio della finestra radice (vedere la funzionegtk.gdk.get_default_root_window()
).
Restituisce solo una finestra - "('UTF8_STRING', 8, 'wnd.py')", e ho tre finestre aperte gedit – john
Ricevo lo stesso problema dopo il test - la funzione non ha funzionato come riferimento suggerito che lo farebbe. La tua migliore scommessa per ora è probabilmente quella di usare la chiamata a wmctrl -l come suggerito da NawaMan; a parte questo, l'unica cosa che posso pensare è usare direttamente il modulo X11. –
Non so davvero come controllare se una finestra è una GTK. Ma se vuoi controllare quante finestre sono attualmente aperte prova "wmctrl -l". Installatelo prima di tutto.
Analisi uscita di linea di comando di solito non è il modo migliore, si è dipendenti da che i programmi di uscita non cambiano, che potrebbero variare da versione o dalla piattaforma. Ecco come farlo usando Xlib:
import Xlib.display
screen = Xlib.display.Display().screen()
root_win = screen.root
window_names = []
for window in root_win.query_tree()._data['children']:
window_name = window.get_wm_name()
window_names.append(window_name)
print window_names
Nota che questa lista conterrà finestre che normalmente non si classificano come 'finestre', ma questo non importa per ciò che si sta cercando di fare.
Per qualsiasi motivo, non posso pubblicare un commento, ma vorrei aggiungere questo come addendum alla risposta di Sandy.
Ecco un pezzo di codice che elenca le finestre attuali sulla console:
import pygtk
pygtk.require('2.0')
import gtk, wnck
if __name__ == "__main__":
default = wnck.screen_get_default()
while gtk.events_pending():
gtk.main_iteration(False)
window_list = default.get_windows()
if len(window_list) == 0:
print "No Windows Found"
for win in window_list:
if win.is_active():
print '***' + win.get_name()
else:
print win.get_name()
Grazie Sandy!
Benvenuti nel 2013! Ecco il codice che utilizza Wnck
e le sue moderne librerie di introspezione GObject invece del metodo PyGTK ora deprecato.Si può anche verificare my other answer about wnck:
from gi.repository import Gtk, Wnck
Gtk.init([]) # necessary only if not using a Gtk.main() loop
screen = Wnck.Screen.get_default()
screen.force_update() # recommended per Wnck documentation
# loop all windows
for window in screen.get_windows():
print window.get_name()
# ... do whatever you want with this window
# clean up Wnck (saves resources, check documentation)
window = None
screen = None
Wnck.shutdown()
Per quanto riguarda la documentazione, controlla la Libwnck Reference Manual. Non è specifico per Python, ma l'intero punto di utilizzo di GObject Introspection è di avere la stessa API in tutte le lingue, grazie ai binding gir
.
Inoltre, le navi Ubuntu sia con wnck
e il suo corrispondente gir
vincolante, fuori dalla scatola, ma se è necessario installarli:
sudo apt-get install libwnck-3-* gir1.2-wnck-3.0
Questo sarà anche installare libwnck-3-dev
, che non è necessario, ma installerà utile documentazione che è possibile leggere utilizzando DevHelp
Questa soluzione ha funzionato per me, mentre la risposta accettata ha sollevato un errore affermando che non c'è 'wnck.screen_get_default()'. Anche se questa risposta è più recente dell'altro, penso che questa dovrebbe essere la risposta accettata, dal momento che quella vecchia non funziona più. – Zelphir
Si prega di chiarire: si desidera ottenere l'elenco delle directory visualizzate in tutte le schede di tutte le finestre di Nautilus? – akaihola