Aze*_*rah 4 python linux keyboard-shortcuts hotkeys
我刚刚写了一个小程序,每隔几分钟从flickr下载一个新壁纸.
现在我想添加"喜欢"壁纸的功能,所以它会比非喜欢或不喜欢的壁纸更频繁地出现.
我想为这个功能分配一个全局键盘快捷键.
例如:如果按ctrl + 7,它将在Python中执行某种"喜欢"的功能.
是否有任何库(在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()
Run Code Online (Sandbox Code Playgroud)
您将不得不扩展处理程序以满足您的需要,而不仅仅是打印到屏幕,然后将其转换为单独的线程.
(痛苦的)替代方案是直接听键盘,而不依赖于外部库或X会话.在linux中,一切都是文件,您的键盘输入将在/ dev/input中,您可以将其作为文件读取,例如open('/dev/input/even2', 'rb'),在后台.这不建议,因为它需要升级权限,找出哪个设备是键盘,然后创建自己的键映射.只是想让你知道必要时有什么可能.
编辑:还使用Python gtk3在X上找到了全局键绑定,这似乎有更多示例优点.