9
votes

Comment obtenir la liste des fenêtres ouvertes à Pygtk ou GTK à Ubuntu?

Comment obtenir la liste des fenêtres ouvertes dans Pygtk ou GTK ou autre langage de programmation? à Ubuntu?

EDIT:

Je veux obtenir des trajectoires d'ouverture des chemins de liste sur le bureau!


1 commentaires

Veuillez clarifier: Voulez-vous obtenir la liste des répertoires affichés dans tous les onglets de toutes les fenêtres Nautilus?


6 Réponses :


2
votes

de Référence PYGTK :

gtk.gdk.window_get_toplevels ()

Le gtk.gdk.window_get_toplevels () fonction renvoie une liste de tous Windows Toplevel connus de Pygtk sur le Écran par défaut. Une fenêtre de toplevel est une enfant de la fenêtre de la racine (voir le gtk.gdk.get_default_root_window () fonction).


2 commentaires

Il ne renvoie qu'une seule fenêtre - "('utf8_string', 8, 'wnd.py')", et j'ai trois fenêtres d'ouverture de Gedit


Je reçois le même problème après le test - la fonction n'a pas fonctionné comme la référence suggérée. Votre meilleur choix pour le moment est probablement plutôt d'utiliser l'appel à WMCTRL -L comme suggéré par Nawaman; En plus de cela, la seule chose que je peux penser est directement à l'aide du module X11.



2
votes

Je ne sais vraiment pas comment vérifier si une fenêtre est un GTK un. Mais si vous souhaitez vérifier combien de fenêtres sont actuellement ouvertes, essayez "wmctrl -l". Installez-le d'abord bien sûr.


0 commentaires

10
votes

Vous voulez probablement utiliser libwnck:

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

Je crois qu'il y a des liaisons python dans Python-gnome ou un package similaire.

Une fois que vous avez le GTK + Mainloop en cours d'exécution, vous pouvez Effectuez ce qui suit: xxx

Certaines méthodes intéressantes sur une fenêtre de cette liste sont get_name () et activez ().

Ceci imprimera les noms de Windows à la console lorsque vous cliquez sur le bouton. Mais pour une raison quelconque, je devais cliquer deux fois sur le bouton. C'est ma première fois en utilisant libwnck, donc je manque probablement quelque chose. : -) xxx


4 commentaires

wnck.screen_get_default (). get_windows () - Renvoie la liste vide :(


Dans mon test rapide, j'ai dû mener une fenêtre GTK + (dans mon processus de Python) avant que l'appel ne fonctionnerait.


Si votre application est non-GUI, vous pouvez le faire alors que "gtk.events_pending (): gtk.main_itération ()" après "wnck.get_screen_default ()" pour affleurer des événements et pouvoir obtenir la liste des fenêtres.


Il y a aussi écran.force_update () . Voir les pièges communs dans développeur.gnome.org/libwnck/stable/geting-starté. HTML



3
votes

La sortie de ligne de commande d'analyse n'est généralement pas la meilleure solution, que vous dépendez de la sortie de ces programmes ne changeant pas, ce qui pourrait varier de la version ou de la platine. Voici comment le faire à l'aide de 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


0 commentaires

4
votes

Pour une raison quelconque, je ne peux pas poster un commentaire, mais j'aimerais ajouter ceci comme un addendum à la réponse de Sandy.

Voici un morceau de code qui répertorie les fenêtres actuelles sur la console: xxx

merci sableux!


0 commentaires

12
votes

Bienvenue à 2013! Voici le code utilisant wnck et ses bibliothèques d'introspection de GOBJECT modernes au lieu de la méthode pygtk maintenant obsolète. Vous pouvez également vérifier Mon autre réponse à propos de WNCK : xxx

comme pour la documentation, chèque Out the Manuel de référence de libwnck . Il n'est pas spécifique pour Python, mais tout le point d'utilisation de GOBJECT INTROSPHIPE consiste à avoir la même API dans toutes les langues, grâce aux liaisons gir .

aussi, Ubuntu navires avec wnck et son correspondant gir de la boîte, mais si vous devez les installer: xxx

ceci installera également libwnck-3-dev , qui n'est pas nécessaire mais installera une documentation utile que vous pouvez lire en utilisant DEVHELP


1 commentaires

Cette solution a fonctionné pour moi, tandis que la réponse acceptée a soulevé une erreur indiquant qu'il n'y a pas wnck.screen_get_default () . Bien que cette réponse soit plus récente que l'autre, je pense que cela devrait être la réponse acceptée, puisque l'ancien ne fonctionne plus.