pynput 代码没有给我一个简单的字符串作为键
pynput code doesn't give me a simple string as a key
我有这个简单的 pynput 代码:
import pynput
from pynput.keyboard import Key, Listener
keys = []
def on_press(key):
keys.append(key)
write_file(keys)
def write_file(keys):
allowed = ['7','9','1','3','4','5','6','q','w','e','z']
with open('log.txt', 'w') as f:
for key in keys:
if key in allowed:
# removing ''
k = str(key).replace("'", "")
f.write(k)
f.write(',')
def on_release(key):
print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press = on_press,
on_release = on_release) as listener:
listener.join()
当我 运行 并在键盘上输入 7 时,我希望它会将 7 写入 log.txt,因为它在允许列表中。但事实并非如此。我使用 import pdb 和 pdb.set_trace() 跟踪它,当我手动输入
'7' in allowed
我得到一个 True
但是当我使用
key in allowed
即使键是“7”,我也得到了一个 False。我怀疑这与类型有关,因为当我使用
type(key)
我明白了
<class 'pynput.keyboard._xorg.KeyCode'>
所以我想我必须让 key 成为一个普通而无聊的字符串。但是
str(key)
仍然不会说它在允许列表中。
我尝试查看有关 KeyCode 的 pynput 文档,但我认为这对我没有帮助。也许其他人知道如何进行这项工作?
你要比较
key.char == '7'
但是当 key
没有 .char
时它会给出错误 - 即 Ctrl
、Alt
、Shift
等,甚至 Space
- 比较
更安全
key == KeyCode.from_char('7')
from pynput.keyboard import Listener, Key, KeyCode
def on_press(key):
try:
print('from_char:', key == KeyCode.from_char('7'))
print('key.char :', key.char == '7')
except Exception as ex:
print('Error:', ex)
def on_release(key):
#print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
编辑:
from pynput.keyboard import Listener, Key, KeyCode
#allowed = [KeyCode.from_char('7'), KeyCode.from_char('9')]
#allowed = [KeyCode.from_char(char) for char in ['7','9','1','3','4','5','6','q','w','e','z']]
allowed = [KeyCode.from_char(char) for char in '7913456qwez']
def on_press(key):
try:
print('allowed:', key in allowed)
except Exception as ex:
print('Error:', ex)
def on_release(key):
#print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
我有这个简单的 pynput 代码:
import pynput
from pynput.keyboard import Key, Listener
keys = []
def on_press(key):
keys.append(key)
write_file(keys)
def write_file(keys):
allowed = ['7','9','1','3','4','5','6','q','w','e','z']
with open('log.txt', 'w') as f:
for key in keys:
if key in allowed:
# removing ''
k = str(key).replace("'", "")
f.write(k)
f.write(',')
def on_release(key):
print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press = on_press,
on_release = on_release) as listener:
listener.join()
当我 运行 并在键盘上输入 7 时,我希望它会将 7 写入 log.txt,因为它在允许列表中。但事实并非如此。我使用 import pdb 和 pdb.set_trace() 跟踪它,当我手动输入
'7' in allowed
我得到一个 True
但是当我使用
key in allowed
即使键是“7”,我也得到了一个 False。我怀疑这与类型有关,因为当我使用
type(key)
我明白了
<class 'pynput.keyboard._xorg.KeyCode'>
所以我想我必须让 key 成为一个普通而无聊的字符串。但是
str(key)
仍然不会说它在允许列表中。
我尝试查看有关 KeyCode 的 pynput 文档,但我认为这对我没有帮助。也许其他人知道如何进行这项工作?
你要比较
key.char == '7'
但是当 key
没有 .char
时它会给出错误 - 即 Ctrl
、Alt
、Shift
等,甚至 Space
- 比较
key == KeyCode.from_char('7')
from pynput.keyboard import Listener, Key, KeyCode
def on_press(key):
try:
print('from_char:', key == KeyCode.from_char('7'))
print('key.char :', key.char == '7')
except Exception as ex:
print('Error:', ex)
def on_release(key):
#print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()
编辑:
from pynput.keyboard import Listener, Key, KeyCode
#allowed = [KeyCode.from_char('7'), KeyCode.from_char('9')]
#allowed = [KeyCode.from_char(char) for char in ['7','9','1','3','4','5','6','q','w','e','z']]
allowed = [KeyCode.from_char(char) for char in '7913456qwez']
def on_press(key):
try:
print('allowed:', key in allowed)
except Exception as ex:
print('Error:', ex)
def on_release(key):
#print('{0} released'.format(key))
if key == Key.esc:
# Stop listener
return False
with Listener(on_press=on_press, on_release=on_release) as listener:
listener.join()