一个轻量级全局热键管理器,支持组合键、热键动态设置,支持绑定记录用户按下的组合键。
Project description
Xiaoe Keyboard 🎹
一个轻量、精准的 Python 全局热键管理器。基于 pynput 封装,专为需要处理复杂组合键和 UI 线程安全的桌面应用设计。
✨ 为什么选择它?
- 🧠 智能组合键匹配:底层使用
set子集算法匹配按键,完全无视用户按下组合键的先后顺序。 - 🎯 贪心精准触发:同时注册
Ctrl+D和Ctrl+Shift+D时,只会精准触发匹配度最高的那个,不会发生冲突。 - 🎛️ 完美的“预览-保存”交互:支持
fitter_fun拦截机制。用户按下快捷键后,可以先在 UI 上预览(如:"你即将设置为 Ctrl+C"),用户点“确认”后再真正应用保存,体验极其优雅。也可以不设置fitter_fun,用户松手后立刻触发保存。传入你的保存方法save_fun,比如说将按键存储在配置文件中,它将在触发保存后调用。
📦 安装
pip install xiaoe-keyboard
🚀 快速上手
只需三步,即可监听全局快捷键:
from xiaoe_keyboard import Keyboard
def my_action():
print("你按下了 Ctrl + D!")
# value 必须是 set 类型
hotkey_list = [
{'name': '我的热键', 'value': {'ctrl_l', 'd'}, 'down_fun': my_action}
]
# 启动监听
kb = Keyboard(hotkey_list)
input("按回车键退出程序...\n")
📖 进阶用法:动态设置热键(配合 Tkinter)
在实际桌面开发中,我们经常需要让用户“自定义快捷键”。以下演示了如何配合 Tkinter 实现完美的交互流程:
import tkinter as tk
from xiaoe_keyboard import Keyboard
win = tk.Tk()
win.geometry("300x200")
# 1. 定义初始热键
hotkey_list = [
{'name': '测试热键', 'value': {'ctrl_l', 'd'}, 'down_fun': lambda: print("执行了热键!"), 'up_fun': lambda: print("松开了热键!")}
]
# 2. 定义保存和预处理函数
def save_fun(name, value):
print(f"[已保存] {name} -> {value}")
# TODO: 在这里写入配置文件或数据库
will_save_hotkey = {}
def fitter_fun(name, value):
"""用户松手后,先触发这里,用于在界面上展示预览"""
will_save_hotkey[name] = value
label.config(text=f"即将设置为: {value} (请点保存)")
# 3. 实例化 Keyboard,传入 tk_win 保证线程安全
kb = Keyboard(hotkey_list, tk_win=win, save_fun=save_fun, fitter_fun=fitter_fun)
# 4. UI 交互逻辑
label = tk.Label(win, text="当前热键: Ctrl+D")
label.pack(pady=10)
def start_setting():
if kb.get_hotkey_setting() is None:
btn.config(text="取消设置")
kb.set_hotkey_setting('测试热键') # 开启读取模式
else:
btn.config(text="修改热键")
kb.set_hotkey_setting(None) # 关闭读取模式
btn = tk.Button(win, text="修改热键", command=start_setting)
btn.pack(pady=5)
def do_save():
if will_save_hotkey:
for name, value in will_save_hotkey.items():
kb.set_one_hotkey_dict(name, value) # 确认应用并触发 save_fun
will_save_hotkey.clear()
save_btn = tk.Button(win, text="保存设置", command=do_save)
save_btn.pack(pady=5)
win.mainloop()
📝 核心参数说明
hotkey_list: 热键配置列表,字典格式。value必须是set。tk_win: 传入 Tkinter 的窗口对象。如果你用 PySide/PyQt,不要传这个参数,确保你的down_fun内部使用非阻塞方式调用 UI 即可。save_fun: 当热键被成功应用/保存时触动的回调。fitter_fun: 如果提供此项,用户松开按键时不会立刻保存,而是触发此函数。你需要自行在 UI 上暂存数据,并在用户点击“确认”后手动调用set_one_hotkey_dict()。
📄 开源协议
基于 MIT License 开源,自由使用,保留署名即可。
Author: 一只黄小娥
Url: [https://www.yzhxe.cn/]
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
xiaoe_keyboard-4.0.1.tar.gz
(10.5 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file xiaoe_keyboard-4.0.1.tar.gz.
File metadata
- Download URL: xiaoe_keyboard-4.0.1.tar.gz
- Upload date:
- Size: 10.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a5aca61443b8f3bc9052e565f7055edfb19402b1c7b02572951b255ad878a8e
|
|
| MD5 |
afa531f31a28ecd465b089fdb5a58e00
|
|
| BLAKE2b-256 |
5c16622f8b69e9abb4a7643fbde28e63c7476a578b33c0e886b891ab755aa18d
|
File details
Details for the file xiaoe_keyboard-4.0.1-py3-none-any.whl.
File metadata
- Download URL: xiaoe_keyboard-4.0.1-py3-none-any.whl
- Upload date:
- Size: 9.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07157a17eb1e5bb9ff86c3c4f76c74ead71fa6e88bbd2186df59a7a1323a3b8c
|
|
| MD5 |
719fc430a6fdd836cd9f6d597d24de89
|
|
| BLAKE2b-256 |
2b8c02401c16db6f59abcd1ee33d6d8340f277894c11238f4856b72c249d2eb8
|