在 Linux 上用 python 监听全局组合键

2023-11-25

我刚刚写了一个小程序,每隔几分钟从 flickr 下载一张新壁纸。

现在我想添加“喜欢”壁纸的功能,因此它会比不喜欢或不喜欢的壁纸更频繁地出现。

我想为此函数分配一个全局键盘快捷键。

例如:如果我按 ctrl+7,它将在 Python 中执行某种“like”函数。

是否有任何库可以实现此目的(例如,在 JavaScript 中,有一个库,我可以在其中定义快捷方式)shortcut("ctrl-b", someFunction);)

不然我怎么会去做这件事呢?我见过这个类似的问题,但它很旧。


我不知道有任何库是为了扩展而设计的。然而,正如您的链接所述,pykeylogger 的后端给出了如何执行此操作的示例,但对于您的需要来说,它似乎有点过于复杂。

pykeylogger 使用 python-xlib 模块捕获 X 显示屏上的按键。有人已经创建了一个更简单的示例来说明如何完成此操作pastebin。以下是按原样复制到此处的源代码。

from Xlib.display import Display
from Xlib import X
from Xlib.ext import record
from Xlib.protocol import rq

disp = None

def handler(reply):
    """ This function is called when a xlib event is fired """
    data = reply.data
    while len(data):
        event, data = rq.EventField(None).parse_binary_value(data, disp.display, None, None)

        # KEYCODE IS FOUND USERING event.detail
        print(event.detail)

        if event.type == X.KeyPress:
            # BUTTON PRESSED
            print("pressed")
        elif event.type == X.KeyRelease:
            # BUTTON RELEASED
            print("released")

# get current display
disp = Display()
root = disp.screen().root

# Monitor keypress and button press
ctx = disp.record_create_context(
            0,
            [record.AllClients],
            [{
                    'core_requests': (0, 0),
                    'core_replies': (0, 0),
                    'ext_requests': (0, 0, 0, 0),
                    'ext_replies': (0, 0, 0, 0),
                    'delivered_events': (0, 0),
                    'device_events': (X.KeyReleaseMask, X.ButtonReleaseMask),
                    'errors': (0, 0),
                    'client_started': False,
                    'client_died': False,
            }])
disp.record_enable_context(ctx, handler)
disp.record_free_context(ctx)

while 1:
    # Infinite wait, doesn't do anything as no events are grabbed
    event = root.display.next_event()

您将必须扩展处理程序以满足您的需求,而不仅仅是打印到屏幕,然后将其放入单独的线程中。

(痛苦的)替代方案是直接听键盘,而不依赖外部库或 X 会话。在Linux中,一切都是文件,你的键盘输入将位于 /dev/input 中例如,您可以将其作为文件读取open('/dev/input/even2', 'rb'),在后台。不建议这样做,因为它需要升级权限,找出哪个设备是键盘,然后创建您自己的键盘映射。只是想让您知道如果有必要的话可以做什么。

编辑:还发现使用 Python gtk3 在 X 上进行全局键绑定这似乎有更多的例子。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Linux 上用 python 监听全局组合键 的相关文章

  • 如何绘制日期和月份

    我有一张随时间变化的每日趋势图表 年份与此处无关 我只想显示日期和月份 我知道你可以显示年份和月份 但事实并非如此 我尝试创建一个名为 Day Month 的新变量 import datetime as dt df Day df date
  • 对同色像素块的边界进行着色

    我有一张有 5 种不同颜色的图像 在这种情况下 随机生成 w h 40 27 img Image new RGB w h pixels img load available colors r 255 13 18 b 72 64 255 y
  • Python启动脚本[重复]

    这个问题在这里已经有答案了 我想执行一个脚本work py在Python中 执行一些初始化脚本后init py 如果我正在寻找交互式会话 请执行python i init py或设置PYTHONSTARTUP path to init py
  • brew install python,但随后:“python-2.7.6 已安装,只是未链接”

    免责声明 菜鸟 操作系统 10 8 5 当我在 bash 中安装 python 时 我得到了这个警告和错误 https i stack imgur com TBgBT png Warning Could not link python Un
  • 如何在 SQLAlchemy 中连接两个表中的数据?

    我有3张桌子 Account User and Organization Account由组成id name and organization id User由组成email and organization id Organization
  • 通过 rpy2 将 numpy 数组传递给 R 时出现不一致数组

    我正在尝试将 numpy 数组传递到 R 中的 GAMLSS 包 import numpy as np import rpy2 robjects as robjects from rpy2 robjects import numpy2ri
  • 求 Petersen 子图中的哈密顿路径

    我开始使用 IDE Jupyter Python 3 6 并出现了一个问题 我必须通过IDE绘制Petersen子图中的哈密顿路径 但我不知道该怎么做 我显示有关该图的信息 彼得森图 https en wikipedia org wiki
  • 将多种类型存储为 C++ 字典中的值?

    我想编写一个行为几乎等同于 Python 字典的 C 对象 C 的std map and std unordered map容纳了 Python 字典已有的一些功能 但缺乏最重要的功能之一 即能够添加任意对象和类型 即使不可能 您离实现 P
  • 多输出回归问题的多重损失

    所以我试图训练一个 CNN 模型来预测 4 个实值输出 回归问题 我尝试使用均方误差作为损失函数 我的问题是我是否将输出层分支为 4 个不同的输出层 其中有 4 个不同的输出层由于最后一层的权重是单独更新的 loss 4 MSE 确实可以使
  • 如何在 difflibs html 输出中突出显示每行超过两个字符

    我在用difflib HtmlDiff比较两个文件 我希望在输出的 html 中突出显示差异 当一行中最多有两个不同的字符时 这已经有效 a 2 000 b 2 120 但是 当一行上有更多不同的字符时 在输出中整行将被标记为红色 在左侧
  • 将字符转换为日期时间 odoo 9

    我有两个字符字段 从 odoo 中的 excel 或 csv 导入数据 time 1 fields Char string Time 1 time 2 fields Char string Time 2 result fields Floa
  • Python 单元测试 Google Bigquery

    我在对以下代码块进行单元测试时遇到问题 from google cloud import bigquery from google oauth2 import service account def run query query gcp
  • 带约束的简单线性回归

    我开发了一种算法来循环 15 个变量并为每个变量生成一个简单的 OLS 然后算法再循环 11 次以产生相同的 15 个 OLS 回归 但 X 变量的滞后每次增加 1 我选择具有最高 r 2 的自变量 并使用 3 4 或 5 个变量的最佳滞后
  • Python 是否有相当于 R 的sample() 函数?

    我想知道Python是否有相当于sample R 中的函数 The sample https stat ethz ch R manual R devel library base html sample html函数使用带替换或不带替换的方
  • 在 selenium 下运行 chromedriver 日志时,如何减少其详细程度?

    我的功能测试的詹金斯失败报告充满了这样的行 selenium webdriver remote remote connection DEBUG Finished Request selenium webdriver remote remot
  • 导入不起作用

    我有两个文件说a py and b py 在 a py 中 我们的确是 import xxx from b import 在 b py 中我们有一个函数需要module xxx 现在当函数在b py被调用自a py它找不到模块xxx 为什么
  • Django 查询集和生成器

    出乎意料的是 我想知道以下使用生成器迭代结果集的方式是否会对正常迭代产生任何积极或消极的影响 eg def all items generator for item in Item objects all yield item for it
  • Tensorflow:为什么 tf.case 给我错误的结果?

    我正在尝试使用tf case https www tensorflow org api docs python tf case https www tensorflow org api docs python tf case 有条件地更新张
  • 使用 pytz 获取时区的国家/地区代码?

    我在用着pytz http pytz sourceforge net country information 我已经阅读了整个文档表 但没有看到如何做到这一点 我有一个时区 美国 芝加哥 我想要的只是获取该时区的相应国家 地区代码 美国 它
  • 访问 django for 循环中的元素

    我有一个 Django 模板 其中包含以下代码 该模板创建多个按钮并尝试通过单击 在同一按钮上 删除 隐藏其中一个按钮 for h in helicopters div class btn group div

随机推荐

  • 核心数据删除规则和多对多关系

    假设您有部门和员工 每个部门有多名员工 但每个员工也可以属于多个部门 所以员工和部门之间是多对多的关系 删除一个部门时 我想删除仅属于该部门的所有员工 并取消属于另一个部门的所有员工与该部门的关系 两个方向的级联规则可以做到这一点吗 或者级
  • 如何在DIV可见之前获取clientWidth和clientHeight

    我想获取 DIV 元素 用于在光标位置显示弹出菜单 的尺寸style display none 但是 DIV 的尺寸始终返回 0 我似乎能够获得尺寸的唯一方法是使 DIVstyle display block 0 0 然后将其移动到所需的位
  • 有条件的 gem 依赖

    是否可以在安装时有条件地设置对 gem 的依赖关系 这是我的情况 希望能澄清这个问题 我维护的 gem 依赖于 json gem 然而 我经常使用 jruby 它有一个名为 json jruby 的 json gem 端口 为了解决这个问题
  • 如何生成n个线程?

    我正在尝试编写一个多线程程序 线程数基于命令行输入 因此我无法对预先声明的线程进行硬编码 这是一种有效的做法吗 int threads 5 dynamic not hard coded int i 0 pthread t thread ma
  • 有人可以向我解释这段 ASP.NET MVC 代码吗?

    这是 ASP NET MVC2 RTM 中的当前代码System Web Mvc AuthorizeAttribute班级 public virtual void OnAuthorization AuthorizationContext f
  • styles_base.xml 文件中出现错误 - android 应用程序 - 找不到与给定名称“android:Widget.Material.ActionButton”匹配的资源

    好的 我是 Android 开发的初学者 我刚刚创建了 hello world 应用程序 但这给了我错误styles base xml文件的appcompat v7图书馆 错误 检索项目的父级时出错 找不到资源 与给定的名称匹配 andro
  • 删除 TFS 2010 中的分支关系

    我刚刚接手了一个 TFS 2010 团队项目 分支层次结构是 Dev 是 Test 的子级 Test 是 Main 的子级 例如 Main Test Dev 然而 在过去的某个时候 有人在 Dev 和 Main 之间进行了毫无根据的合并 这
  • 在 .NET 中获取当前文化日名称

    是否有可能获得CurrentCulture的工作日从DateTimeFormatInfo 但返回Monday作为一周的第一天而不是Sunday 并且 如果当前区域性不是英语 即 ISO 代码不是 en 则将其保留为默认值 默认情况下Cult
  • EntityContainer名称在不同程序集中必须是唯一的?

    我有两个项目 新闻 数据 标签 数据 两者都定义Entities 当我尝试执行时 using var db new News Data Entities name Entities results1 db News ToList using
  • 如何将 SSRS 时间格式转换为 HH:MM AM/PM 格式?

    我的任务是增强以下代码以显示不带秒的时间以及 AM PM IIF Fields New Date Value lt gt NO CHANGE FormatDateTime IIF Fields New Date Value NO CHANG
  • Bash 补全:compgen 一个单词列表,就好像它们是路径一样 - 仅建议直到下一个斜杠

    我正在为一个 bash 完成脚本工作点文件管理实用程序 该工具有一个命令dots diff filename 这将显示安装的点文件和源点文件之间的差异 它还有一个命令dots files其中列出了所有托管点文件的路径 相对于源目录 我想用
  • sendmail 错误 452 这一小时收到的收件人太多

    我们正在向我们的 BREW 设备 在 sprint 网络中 发送大量电子邮件 一段时间后 我们的邮件服务器将消息排队并卡住了 当我们尝试刷新它们时 我们会从服务器获得关注 这个问题有解决办法吗 这个错误 452 是来自我们的邮件服务器还是
  • 查找DBUpdateException的原因

    打电话时DbContext SaveChanges 我得到一个 DbUpdateException 未处理的类型异常 System Data Entity Infrastruct DbUpdateException 发生在 实体框架 dll
  • 如何在 Python 中使用 Selenium 创建新的(持久的)Firefox 配置文件?

    尝试使用 Selenium 添加新的 持久的 Firefox 配置文件 AFAIK 执行时FirefoxProfile 使用临时文件生成新的配置文件 理想情况下 该配置文件应该能够对后续进程保持可用 即使创建者关闭后也是如此 Problem
  • 新的 iOS 7.1 mini-ui 视口设置是否存在错误?

    iOS 7 1 中新的 最小 ui 设置非常适合横向网站 我的网络应用程序使用全屏 绝对定位的 div 来显示其内容 以赋予其类似应用程序的感觉 但 Safari 似乎只是在底部添加了 URL 栏的高度 我在不同的 iPhone 上都试过了
  • Slim 3 自动装载机

    我是 slim 框架的新手 不知道如何使用自动加载器来自动加载我的类 我创建了一个app models myclass php但当然 当我尝试使用它时 我发现找不到课程 我不确定哪种是自动加载类的正确方法 或者我应该使用的命名约定 我应该通
  • Spring Boot 2.2.2.RELEASE 中集成测试隔离失败(每次 SpringBootTest 后删除表时出错)

    我们的应用程序正在 2 0 4 版本中运行 升级到 2 2 2 RELEASE 后 我们看到集成测试失败 我怀疑存在一些配置错误 并且每个集成测试本身都不会清理 或者存在以前不存在的额外初始化 我真的不知道如何正确修复它 再具体一点 每个测
  • 如何通过 REST 查询 SQL Server 来获取 XML

    我们一直在使用 Web 应用程序框架来构建需要能够查询 SQL Server 数据库并获取 XML 形式的结果的应用程序 过去 框架提供了这种能力 但该功能现已被弃用 所以我们在想 该框架允许我们轻松地通过 HTTP 查询 REST 服务
  • 禁用 xampp 将 http 重定向到 https

    我在 localhost 中的 xampp 上为 wordpress 创建了 VirtualHost 并在 httpd vhosts conf 中添加了以下代码
  • 在 Linux 上用 python 监听全局组合键

    我刚刚写了一个小程序 每隔几分钟从 flickr 下载一张新壁纸 现在我想添加 喜欢 壁纸的功能 因此它会比不喜欢或不喜欢的壁纸更频繁地出现 我想为此函数分配一个全局键盘快捷键 例如 如果我按 ctrl 7 它将在 Python 中执行某种