Pregunta

Después de stackoverflow respondió a mi pregunta anterior aquí sobre mi Wiimote dejó cuestión clic / derecha, No sólo puedo mover el cursor del ratón, ahora puedo izquierda / clic derecho sobre las cosas. Ahora tengo una pregunta más.

¿Qué puedo usar en Python para obtener el título de la ventana activa actual? Tras Google 'X11 Python Título de la ventana', 'Linux Python Título de la ventana' y cosas similares, todo lo que encontré es Win32 y he Tkinker (de nuevo?), Que no es lo que necesito.

Si usted podría ayudar, Eso sería increíble!

¿Fue útil?

Solución

Editar

mejor manera:

import gtk
import wnck
import glib

class WindowTitle(object):
    def __init__(self):
        self.title = None
        glib.timeout_add(100, self.get_title)

    def get_title(self):
        try:
            title = wnck.screen_get_default().get_active_window().get_name()
            if self.title != title:
                self.title  = title
                print title
        except AttributeError:
            pass
        return True

WindowTitle()
gtk.main()

manera alternativa:

from subprocess import PIPE, Popen
import time

title = ''
root_check = ''

while True:
    time.sleep(0.6)
    root = Popen(['xprop', '-root'],  stdout=PIPE)

    if root.stdout != root_check:
        root_check = root.stdout

        for i in root.stdout:
            if '_NET_ACTIVE_WINDOW(WINDOW):' in i:
                id_ = i.split()[4]
                id_w = Popen(['xprop', '-id', id_], stdout=PIPE)

        for j in id_w.stdout:
            if 'WM_ICON_NAME(STRING)' in j:
                if title != j.split()[2]:
                    title = j.split()[2]
                    print "current window title: %s" % title

Otros consejos

solución basada en xprop de killown se puede compactar en una sola (aunque muy largo) declaración:

import subprocess
def GetActiveWindowTitle():
    return subprocess.Popen(["xprop", "-id", subprocess.Popen(["xprop", "-root", "_NET_ACTIVE_WINDOW"], stdout=subprocess.PIPE).communicate()[0].strip().split()[-1], "WM_NAME"], stdout=subprocess.PIPE, stderr=subprocess.PIPE).communicate()[0].strip().split('"', 1)[-1][:-1]

Es el problema de averiguar qué ventana está activa o lo que el título es? Conseguir el título de una ventana es fácil:

MainWindow.title()

, donde MainWindow es el nombre de la ventana. Ninguna idea acerca de la ventana activa, aunque. Nunca he tenido varias ventanas.

creo pitón-wnck podría ser útil si se desea manejar ventanas y espacios de trabajo y tal. No puedo encontrar la documentación de Python inmediatamente, pero de acuerdo con la documentación para la biblioteca libwnck C que envuelve, que tiene un wnck_screen_get_active_window () método .

Mi solución:

import wnck
disp=Display()
default_screen=wnck.screen_get_default()
default_screen.force_update()

active_window=disp.create_resource_object('window', default_screen.get_active_window().get_xid())
title=active_window.get_wm_name()

Me di cuenta de que wnck requiere bucle de eventos GTK para actualizar la ventana activa. No hay tal problema con Xlib:

import Xlib
import Xlib.display
disp = Xlib.display.Display()
window = disp.get_input_focus().focus

# Get active window class and name
window.get_wm_class()
window.get_wm_name()
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top