微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如果活动窗口在 linux 中发生变化,则执行 python 代码

如何解决如果活动窗口在 linux 中发生变化,则执行 python 代码

我有以下代码使用无限循环来检查活动窗口是否已更改。此程序在活动窗口更改时打印当前窗口的名称。必须有更好的方法来做到这一点。如何让我的 python 代码始终在没有无限循环的情况下监听活动窗口的变化?

import subprocess
import psutil

pid = subprocess.check_output(["xdotool","getactivewindow","getwindowpid"]).decode("utf-8").strip()
prevpid=pid
print(pid)
while(True):
    pid = subprocess.check_output(["xdotool","getwindowpid"]).decode("utf-8").strip()
    if prevpid!=pid:
        process=psutil.Process(int(pid))
        processName=process.name()
        print("Current Active Process is "+processName)
        prevpid=pid

解决方法

如果你在 X 上,而不是轮询,最好使用 Wnck.Screenactive_window_changed 信号,从 Gtk 循环运行。举个简单的例子:

#!/usr/bin/env python3
import gi
gi.require_version('Gtk','3.0')
gi.require_version('Wnck','3.0')
from gi.repository import Gtk,Wnck


def dosomething(screen,previous_window):
    try:
        print(
            previous_window.get_name(),"||",screen.get_active_window().get_name()
        )
        # or run any action
    except AttributeError:
        pass


wnck_scr = Wnck.Screen.get_default()
wnck_scr.force_update()
wnck_scr.connect("active-window-changed",dosomething)
Gtk.main()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。