Я использую библиотеку pynput для отслеживания щелчков мыши. Единственная проблема, с которой я сталкиваюсь, заключается в том, что терминал не завершает работу при нажатии Ctrl + C. Мне нужно использовать клавиатуру слушателя с мышью слушателя. Вот мой код:
import os
import time
import re
from pynput import mouse
from pynput.keyboard import Key, Listener
f=open('maniac1.txt','a')
inc=1
f.write('<mouse_new>\n')
def on_click(x, y, button, pressed):
f=open('maniac1.txt','a')
if button == mouse.Button.left:
print 'Left'
f.write('left\n')
if button == mouse.Button.right:
print 'right'
f.write('right\n')
if button == mouse.Button.middle:
print 'middle'
f.write('middle\n')
with mouse.Listener(on_click=on_click,on_scroll=on_scroll) as listener:
try:
listener.join()
except MyException as e:
print('Done'.format(e.args[0]))
Как я могу завершить этот код после нажатия Esc или Ctrl + C? Я использую OSX.
3 ответа
Создайте экземпляр keyboard.Listener без ключевого слова «with», чтобы вы могли запускать и останавливать прослушиватель на основе прослушивателя мыши. Проверьте код ниже, который прекратит слушать нажатие клавиши f8 после щелчка правой кнопкой мыши.
import os
import time
import re
from pynput import mouse
from pynput.keyboard import Key, Listener
#f=open('maniac1.txt','a')
inc=1
#f.write('<mouse_new>\n')
from pynput import keyboard
def on_functionf8(key):
if (key==keyboard.Key.f8):
print('f8 is pressed')
key_listener = keyboard.Listener(on_release=on_functionf8)
key_listener.start()
def on_click(x, y, button, pressed):
f=open('maniac1.txt','a')
if button == mouse.Button.left:
print ('Left')
#f.write('left\n')
if button == mouse.Button.right:
key_listener.stop()
print ('right')
#f.write('right\n')
if button == mouse.Button.middle:
print ('middle')
#f.write('middle\n')
with mouse.Listener(on_click=on_click) as listener:
try:
listener.join()
except MyException as e:
print('Done'.format(e.args[0]))
Запустите программу и нажмите f8, и вы увидите «f8 нажата» на терминале. Но щелкните правой кнопкой мыши и нажмите f8. Вы не увидите ничего напечатанного, когда мы остановили слушателя клавиатуры при щелчке правой кнопкой мыши.
Для Mac:
def on_press(key):
try:
print('alphanumeric key {0} pressed'.format(
key.char))
except AttributeError:
print('special key {0} pressed'.format(
key))
key_listener = keyboard.Listener(on_release=on_press)
Только несколько клавиш, таких как cmd, alt, по умолчанию прослушиваются на Mac.
Этот код использует мышь и клавиатуру слушателей вместе.
from pynput.keyboard import Listener as KeyboardListener
from pynput.mouse import Listener as MouseListener
from pynput.keyboard import Key
import logging
logging.basicConfig(filename=("log.txt"), level=logging.DEBUG, format='%(asctime)s: %(message)s')
def end_rec(key):
logging.info(str(key))
def on_press(key):
logging.info(str(key))
def on_move(x, y):
logging.info("Mouse moved to ({0}, {1})".format(x, y))
def on_click(x, y, button, pressed):
if pressed:
logging.info('Mouse clicked at ({0}, {1}) with {2}'.format(x, y, button))
def on_scroll(x, y, dx, dy):
logging.info('Mouse scrolled at ({0}, {1})({2}, {3})'.format(x, y, dx, dy))
with MouseListener(on_click=on_click, on_scroll=on_scroll) as listener:
with KeyboardListener(on_press=on_press) as listener:
listener.join()
Я только что закончил то же самое несколько часов назад, вот что я написал.
Сначала добавьте еще один слушатель клавиатуры:
# Collect events until released
with keyboard.Listener(on_release=on_release) as k_listener, \
mouse.Listener(on_click=on_click) as m_listener:
k_listener.join()
m_listener.join()
Затем добавьте функцию on_release
:
def on_release(key):
if key == keyboard.Key.esc:
# Stop listeners
m_listener.stop()
return False
Тогда, если вы нажмете Esc
, этот код будет прерван.
Для OSX вам нужно запустить python с sudo
, иначе он не будет работать нормально.
Похожие вопросы
Новые вопросы
python
Python - это многопарадигмальный, динамически типизированный, многоцелевой язык программирования. Он разработан для быстрого изучения, понимания и использования, а также для обеспечения чистого и единообразного синтаксиса. Обратите внимание, что Python 2 официально не поддерживается с 01.01.2020. Тем не менее, для вопросов о Python, связанных с версией, добавьте тег [python-2.7] или [python-3.x]. При использовании варианта Python (например, Jython, PyPy) или библиотеки (например, Pandas и NumPy) включите его в теги.