Pregunta

Como llegar a la lista de ventanas abiertas en PyGTK o GTK o cualquier otro lenguaje de programación? en Ubuntu?

editar

quiero conseguir enumeran las rutas de directorios abiertos en el escritorio!

¿Fue útil?

Solución

Es posible que desee utilizar libwnck:

http://library.gnome.org/devel/libwnck/stable/

Creo que hay enlaces de Python en Python-gnome o algún paquete similar.

Una vez que tenga el GTK + mainloop en funcionamiento, puede hacer lo siguiente:

import wnck
window_list = wnck.screen_get_default().get_windows()

Algunos métodos interesantes sobre una ventana de esa lista son get_name () y activar ().

Esto imprimirá los nombres de las ventanas a la consola cuando se hace clic en el botón. Pero por alguna razón tuviera que hacer clic en el botón dos veces. Esta es mi primera vez usando libwnck así que estoy probablemente perdiendo algo. : -)

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()

Otros consejos

Bienvenido a 2013! Aquí está el código usando Wnck y sus modernas bibliotecas GObject introspección en lugar del método PyGTK ahora en desuso. También puede comprobar mi otra respuesta sobre 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()

En cuanto a la documentación, visite el libwnck Manual de referencia . No es específico para Python, pero el punto de utilizar GObject La introspección es tener la misma API en todos los idiomas, gracias a los enlaces gir.

Además, Ubuntu viene con tanto wnck y su correspondiente gir unión fuera de la caja, pero si es necesario instalarlos:

sudo apt-get install libwnck-3-* gir1.2-wnck-3.0

Esto también instalará libwnck-3-dev, que no es necesaria, pero se instalará documentación útil se puede leer usando DevHelp

Por alguna razón, no puedo publicar un comentario, pero me gustaría añadir esto como una adición a la respuesta de arena.

Aquí hay un trozo de código que enumera las ventanas actuales en la consola:

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()

Gracias arena!

Análisis de la salida de línea de comandos por lo general no es la mejor manera, usted depende de que los programas de salida no cambian, lo que podría variar de versión o platfrom. Aquí es cómo hacerlo 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

Tenga en cuenta que esta lista contendrá ventanas que normalmente no se clasificaría como 'ventanas', pero eso no importa para lo que usted está tratando de hacer.

Realmente no sé cómo comprobar si una ventana es un GTK. Pero si usted quiere comprobar cuántas ventanas están actualmente abierto probarlo "wmctrl-l". Instalarlo primero, por supuesto.

la PyGTK referencia :

  

gtk.gdk.window_get_toplevels()

     

El gtk.gdk.window_get_toplevels()   función devuelve una lista de todos   ventanas de nivel superior se sabe que en el PyGTK   pantalla predeterminada. Una ventana de nivel superior es una   hijo de la ventana raíz (véase el   gtk.gdk.get_default_root_window()   función).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top