如何使用pynput.keyboard模块键入UTF8 Emojis

2024-09-30 16:23:06 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用键盘输入UTF-8表情符号,但我总是遇到以下异常。 Pynput查看是否正确转换UTF-8符号,但无法将其键入

Traceback (most recent call last):
  File "pasteEmoji.py", line 11, in <module>
    keyboard.type('\U0001f61a')
  File "/usr/local/lib/python3.7/dist-packages/pynput/keyboard/_base.py", line 468, in type
    raise self.InvalidCharacterException(i, character)
pynput.keyboard._base.InvalidCharacterException: (0, '😚')

from pynput.keyboard import Key, Controller
import time

keyboard = Controller()

print("2 Seconds left...")
time.sleep(2)

keyboard.type('\U0001f61a')

有人知道如何打印UTF-8符号吗? 提前谢谢


Tags: inpyimportbasetimetypeline符号
1条回答
网友
1楼 · 发布于 2024-09-30 16:23:06

不完全是你想要的解决方案,也许只是部分解决方案。但我发现xdool会发送这些字符。然而,Firefox(可能还有其他浏览器)似乎禁用了该功能

您可以这样实现它:

import subprocess
subprocess.run(["xdotool", "type", "\U0001F61A"])

还有一个python库,它实现了名为libxdo的xdotool。但是它已经好几年没有更新了,我也没有测试它

如果我找到更好的解决方案,我会更新这个

编辑:我发现了一个非常黑客的解决方案,它可以工作,看起来相当快,并且可以在Firefox中工作。它需要启用CTRL+SHIFT+U unicode十六进制快捷键。可以通过按下这些按钮进行测试,如果u带下划线,则表示您很好

from evdev import UInput, ecodes as e

ui = UInput()

string = "1F61A" #The unicode hexcode. Make sure it's in uppercase
ui.write(e.EV_KEY, e.KEY_LEFTCTRL, 1)       
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 1)      
ui.write(e.EV_KEY, e.KEY_U, 1)      
ui.write(e.EV_KEY, e.KEY_U, 0)
ui.write(e.EV_KEY, e.KEY_LEFTSHIFT, 0)  
ui.write(e.EV_KEY, e.KEY_LEFTCTRL, 0)
for s in string:
    exec("ui.write(e.EV_KEY, e.KEY_{}, 1)".format(s))
    exec("ui.write(e.EV_KEY, e.KEY_{}, 0)".format(s))
ui.write(e.EV_KEY, e.KEY_ENTER, 1)  
ui.write(e.EV_KEY, e.KEY_ENTER, 0)  
ui.syn()

不漂亮,但对我来说效果不错

编辑2:最后一次编辑。我在pynput的github here上为这个问题重新提出了一个旧问题。并且创建了一个对我有效的修复,应该很快推送到主分支

相关问题 更多 >