Python 键盘事件的监听为啥像这样总是出现未响应
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python 键盘事件的监听为啥像这样总是出现未响应相关的知识,希望对你有一定的参考价值。
#代码如下
import sys, time, graphics
choice = ''
win = graphics.GraphWin("Test", 500, 500)
def ifContinue():
global choice
playing = True
while playing:
if choice == 'Q':
sys.exit(0)
if choice == 'S':
playing = False
time.sleep(0.1)
# Handle key press event
def handleKeys(event):
global choice
print('Key pressed', event.keysym, event.keycode)
if event.keysym == 's' or event.keysym == 'S':
choice = 'S'
if event.keysym == 'q' or event.keysym == 'Q':
choice = 'Q'
# Wait for events - key entry events
win.bind_all('<Key>', handleKeys)
while True:
ifContinue()
if choice == 'S':
print("You press 's'")
# Wait for events - main loop
win.mainloop()
你可以考虑使用 pygame或者是pygtk,甚至 wxWin都比这个强。 参考技术A 你的代码不对,应该这样写,代码如下:
Python监听鼠标键盘事件
# -*- coding: utf-8 -*- __author__ = ‘P00113‘ # coding: utf-8 import pythoncom import pyHook import win32api import win32con import time import threading import random VK_CODE = { ‘backspace‘: 0x08, ‘tab‘: 0x09, ‘clear‘: 0x0C, ‘enter‘: 0x0D, ‘shift‘: 0x10, ‘ctrl‘: 0x11, ‘alt‘: 0x12, ‘pause‘: 0x13, ‘caps_lock‘: 0x14, ‘esc‘: 0x1B, ‘spacebar‘: 0x20, ‘page_up‘: 0x21, ‘page_down‘: 0x22, ‘end‘: 0x23, ‘home‘: 0x24, ‘left_arrow‘: 0x25, ‘up_arrow‘: 0x26, ‘right_arrow‘: 0x27, ‘down_arrow‘: 0x28, ‘select‘: 0x29, ‘print‘: 0x2A, ‘execute‘: 0x2B, ‘print_screen‘: 0x2C, ‘ins‘: 0x2D, ‘del‘: 0x2E, ‘help‘: 0x2F, ‘0‘: 0x30, ‘1‘: 0x31, ‘2‘: 0x32, ‘3‘: 0x33, ‘4‘: 0x34, ‘5‘: 0x35, ‘6‘: 0x36, ‘7‘: 0x37, ‘8‘: 0x38, ‘9‘: 0x39, ‘a‘: 0x41, ‘b‘: 0x42, ‘c‘: 0x43, ‘d‘: 0x44, ‘e‘: 0x45, ‘f‘: 0x46, ‘g‘: 0x47, ‘h‘: 0x48, ‘i‘: 0x49, ‘j‘: 0x4A, ‘k‘: 0x4B, ‘l‘: 0x4C, ‘m‘: 0x4D, ‘n‘: 0x4E, ‘o‘: 0x4F, ‘p‘: 0x50, ‘q‘: 0x51, ‘r‘: 0x52, ‘s‘: 0x53, ‘t‘: 0x54, ‘u‘: 0x55, ‘v‘: 0x56, ‘w‘: 0x57, ‘x‘: 0x58, ‘y‘: 0x59, ‘z‘: 0x5A, ‘numpad_0‘: 0x60, ‘numpad_1‘: 0x61, ‘numpad_2‘: 0x62, ‘numpad_3‘: 0x63, ‘numpad_4‘: 0x64, ‘numpad_5‘: 0x65, ‘numpad_6‘: 0x66, ‘numpad_7‘: 0x67, ‘numpad_8‘: 0x68, ‘numpad_9‘: 0x69, ‘multiply_key‘: 0x6A, ‘add_key‘: 0x6B, ‘separator_key‘: 0x6C, ‘subtract_key‘: 0x6D, ‘decimal_key‘: 0x6E, ‘divide_key‘: 0x6F, ‘F1‘: 0x70, ‘F2‘: 0x71, ‘F3‘: 0x72, ‘F4‘: 0x73, ‘F5‘: 0x74, ‘F6‘: 0x75, ‘F7‘: 0x76, ‘F8‘: 0x77, ‘F9‘: 0x78, ‘F10‘: 0x79, ‘F11‘: 0x7A, ‘F12‘: 0x7B, ‘F13‘: 0x7C, ‘F14‘: 0x7D, ‘F15‘: 0x7E, ‘F16‘: 0x7F, ‘F17‘: 0x80, ‘F18‘: 0x81, ‘F19‘: 0x82, ‘F20‘: 0x83, ‘F21‘: 0x84, ‘F22‘: 0x85, ‘F23‘: 0x86, ‘F24‘: 0x87, ‘num_lock‘: 0x90, ‘scroll_lock‘: 0x91, ‘left_shift‘: 0xA0, ‘right_shift ‘: 0xA1, ‘left_control‘: 0xA2, ‘right_control‘: 0xA3, ‘left_menu‘: 0xA4, ‘right_menu‘: 0xA5, ‘browser_back‘: 0xA6, ‘browser_forward‘: 0xA7, ‘browser_refresh‘: 0xA8, ‘browser_stop‘: 0xA9, ‘browser_search‘: 0xAA, ‘browser_favorites‘: 0xAB, ‘browser_start_and_home‘: 0xAC, ‘volume_mute‘: 0xAD, ‘volume_Down‘: 0xAE, ‘volume_up‘: 0xAF, ‘next_track‘: 0xB0, ‘previous_track‘: 0xB1, ‘stop_media‘: 0xB2, ‘play/pause_media‘: 0xB3, ‘start_mail‘: 0xB4, ‘select_media‘: 0xB5, ‘start_application_1‘: 0xB6, ‘start_application_2‘: 0xB7, ‘attn_key‘: 0xF6, ‘crsel_key‘: 0xF7, ‘exsel_key‘: 0xF8, ‘play_key‘: 0xFA, ‘zoom_key‘: 0xFB, ‘clear_key‘: 0xFE, ‘+‘: 0xBB, ‘,‘: 0xBC, ‘-‘: 0xBD, ‘.‘: 0xBE, ‘/‘: 0xBF, ‘`‘: 0xC0, ‘;‘: 0xBA, ‘[‘: 0xDB, ‘\\‘: 0xDC, ‘]‘: 0xDD, "‘": 0xDE, ‘`‘: 0xC0} def key_press(key=‘‘): if key != ‘‘ and isinstance(key, str): if key.__len__() == 1: win32api.keybd_event(VK_CODE[key], 0, 0, 0) print ‘press key down:%s‘ % VK_CODE[key] else: for x in key: win32api.keybd_event(VK_CODE[x], 0, 0, 0) def key_up(key=‘‘): if key != ‘‘ and isinstance(key, str): if key.__len__() == 1: win32api.keybd_event(VK_CODE[key], 0, win32con.KEYEVENTF_KEYUP, 0) print ‘press key up:%s‘ % VK_CODE[key] else: for x in key: win32api.keybd_event(VK_CODE[x], 0, win32con.KEYEVENTF_KEYUP, 0) def send_click(): global down_num, up_num while (1): if down_num != up_num: win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 连射多少秒,大约0.1秒一发子弹 time.sleep(random.uniform(0.38, 0.42)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 连发之间的停顿时间 time.sleep(random.uniform(0.25, 0.29)) key_press(‘2‘) key_up(‘2‘) time.sleep(random.uniform(0.38, 0.56)) key_press(‘1‘) key_up(‘1‘) print ‘click ok‘ def onMouse_leftdown(event): # 监听鼠标左键按下事件 global down_num down_num += 1 print "left DOWN DOWN" + str(down_num) return True # 返回 True 表示响应此事件,False表示拦截 def onMouse_leftup(event): # 监听鼠标左键弹起事件 global up_num up_num += 1 print "left UP UP UP" + str(up_num) return True def keybord_1(event): pass def main(): hm = pyHook.HookManager() hm.MouseLeftDown = onMouse_leftdown hm.MouseLeftUp = onMouse_leftup hm.HookMouse() # 进入循环,如不手动关闭,程序将一直处于监听状态 pythoncom.PumpMessages() if __name__ == "__main__": down_num = 0 up_num = 0 # 新线程执行的代码: print(‘thread %s is running...‘ % threading.current_thread().name) t = threading.Thread(target=send_click, name=‘sendThread‘) t.start() # t.join() main()
# -*- coding: utf-8 -*- __author__ = ‘P00113‘ # coding: utf-8 import pythoncom import pyHook import win32api import win32con import time import threading import random VK_CODE = { ‘backspace‘: 0x08, ‘tab‘: 0x09, ‘clear‘: 0x0C, ‘enter‘: 0x0D, ‘shift‘: 0x10, ‘ctrl‘: 0x11, ‘alt‘: 0x12, ‘pause‘: 0x13, ‘caps_lock‘: 0x14, ‘esc‘: 0x1B, ‘spacebar‘: 0x20, ‘page_up‘: 0x21, ‘page_down‘: 0x22, ‘end‘: 0x23, ‘home‘: 0x24, ‘left_arrow‘: 0x25, ‘up_arrow‘: 0x26, ‘right_arrow‘: 0x27, ‘down_arrow‘: 0x28, ‘select‘: 0x29, ‘print‘: 0x2A, ‘execute‘: 0x2B, ‘print_screen‘: 0x2C, ‘ins‘: 0x2D, ‘del‘: 0x2E, ‘help‘: 0x2F, ‘0‘: 0x30, ‘1‘: 0x31, ‘2‘: 0x32, ‘3‘: 0x33, ‘4‘: 0x34, ‘5‘: 0x35, ‘6‘: 0x36, ‘7‘: 0x37, ‘8‘: 0x38, ‘9‘: 0x39, ‘a‘: 0x41, ‘b‘: 0x42, ‘c‘: 0x43, ‘d‘: 0x44, ‘e‘: 0x45, ‘f‘: 0x46, ‘g‘: 0x47, ‘h‘: 0x48, ‘i‘: 0x49, ‘j‘: 0x4A, ‘k‘: 0x4B, ‘l‘: 0x4C, ‘m‘: 0x4D, ‘n‘: 0x4E, ‘o‘: 0x4F, ‘p‘: 0x50, ‘q‘: 0x51, ‘r‘: 0x52, ‘s‘: 0x53, ‘t‘: 0x54, ‘u‘: 0x55, ‘v‘: 0x56, ‘w‘: 0x57, ‘x‘: 0x58, ‘y‘: 0x59, ‘z‘: 0x5A, ‘numpad_0‘: 0x60, ‘numpad_1‘: 0x61, ‘numpad_2‘: 0x62, ‘numpad_3‘: 0x63, ‘numpad_4‘: 0x64, ‘numpad_5‘: 0x65, ‘numpad_6‘: 0x66, ‘numpad_7‘: 0x67, ‘numpad_8‘: 0x68, ‘numpad_9‘: 0x69, ‘multiply_key‘: 0x6A, ‘add_key‘: 0x6B, ‘separator_key‘: 0x6C, ‘subtract_key‘: 0x6D, ‘decimal_key‘: 0x6E, ‘divide_key‘: 0x6F, ‘F1‘: 0x70, ‘F2‘: 0x71, ‘F3‘: 0x72, ‘F4‘: 0x73, ‘F5‘: 0x74, ‘F6‘: 0x75, ‘F7‘: 0x76, ‘F8‘: 0x77, ‘F9‘: 0x78, ‘F10‘: 0x79, ‘F11‘: 0x7A, ‘F12‘: 0x7B, ‘F13‘: 0x7C, ‘F14‘: 0x7D, ‘F15‘: 0x7E, ‘F16‘: 0x7F, ‘F17‘: 0x80, ‘F18‘: 0x81, ‘F19‘: 0x82, ‘F20‘: 0x83, ‘F21‘: 0x84, ‘F22‘: 0x85, ‘F23‘: 0x86, ‘F24‘: 0x87, ‘num_lock‘: 0x90, ‘scroll_lock‘: 0x91, ‘left_shift‘: 0xA0, ‘right_shift ‘: 0xA1, ‘left_control‘: 0xA2, ‘right_control‘: 0xA3, ‘left_menu‘: 0xA4, ‘right_menu‘: 0xA5, ‘browser_back‘: 0xA6, ‘browser_forward‘: 0xA7, ‘browser_refresh‘: 0xA8, ‘browser_stop‘: 0xA9, ‘browser_search‘: 0xAA, ‘browser_favorites‘: 0xAB, ‘browser_start_and_home‘: 0xAC, ‘volume_mute‘: 0xAD, ‘volume_Down‘: 0xAE, ‘volume_up‘: 0xAF, ‘next_track‘: 0xB0, ‘previous_track‘: 0xB1, ‘stop_media‘: 0xB2, ‘play/pause_media‘: 0xB3, ‘start_mail‘: 0xB4, ‘select_media‘: 0xB5, ‘start_application_1‘: 0xB6, ‘start_application_2‘: 0xB7, ‘attn_key‘: 0xF6, ‘crsel_key‘: 0xF7, ‘exsel_key‘: 0xF8, ‘play_key‘: 0xFA, ‘zoom_key‘: 0xFB, ‘clear_key‘: 0xFE, ‘+‘: 0xBB, ‘,‘: 0xBC, ‘-‘: 0xBD, ‘.‘: 0xBE, ‘/‘: 0xBF, ‘`‘: 0xC0, ‘;‘: 0xBA, ‘[‘: 0xDB, ‘\\‘: 0xDC, ‘]‘: 0xDD, "‘": 0xDE, ‘`‘: 0xC0} def key_press(key=‘‘): if key != ‘‘ and isinstance(key, str): if key.__len__() == 1: win32api.keybd_event(VK_CODE[key], 0, 0, 0) print ‘press key down:%s‘ % VK_CODE[key] else: for x in key: win32api.keybd_event(VK_CODE[x], 0, 0, 0) def key_up(key=‘‘): if key != ‘‘ and isinstance(key, str): if key.__len__() == 1: win32api.keybd_event(VK_CODE[key], 0, win32con.KEYEVENTF_KEYUP, 0) print ‘press key up:%s‘ % VK_CODE[key] else: for x in key: win32api.keybd_event(VK_CODE[x], 0, win32con.KEYEVENTF_KEYUP, 0) def send_click(): global down_num, up_num while (1): if down_num != up_num: win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0) time.sleep(random.uniform(0.28, 0.32)) win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0) time.sleep(random.uniform(0.18, 0.22)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) # 连射多少秒,大约0.1秒一发子弹 time.sleep(random.uniform(0.38, 0.42)) win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0) # 连发之间的停顿时间 time.sleep(random.uniform(0.25, 0.29)) key_press(‘2‘) key_up(‘2‘) time.sleep(random.uniform(0.68, 0.86)) key_press(‘1‘) key_up(‘1‘) print ‘click ok‘ def onMouse_rightdown(event): # 监听鼠标右键按下事件 # global down_num # down_num += 1 print "right DOWN DOWN" + str(down_num) return True def onMouse_rightup(event): # 监听鼠标左键弹起事件 # global up_num # up_num += 1 print "left UP UP UP" + str(up_num) return True def onMouse_leftdown(event): # 监听鼠标左键按下事件 global down_num down_num += 1 print "left DOWN DOWN" + str(down_num) return True # 返回 True 表示响应此事件,False表示拦截 def onMouse_leftup(event): # 监听鼠标左键弹起事件 global up_num up_num += 1 print "left UP UP UP" + str(up_num) return True def main(): hm = pyHook.HookManager() hm.Mouseright = onMouse_rightdown hm.MouseLeftDown = onMouse_leftdown hm.MouseLeftUp = onMouse_leftup hm.HookMouse() # 进入循环,如不手动关闭,程序将一直处于监听状态 pythoncom.PumpMessages() if __name__ == "__main__": down_num = 0 up_num = 0 # 新线程执行的代码: print(‘thread %s is running...‘ % threading.current_thread().name) t = threading.Thread(target=send_click, name=‘sendThread‘) t.start() # t.join() main()
以上是关于Python 键盘事件的监听为啥像这样总是出现未响应的主要内容,如果未能解决你的问题,请参考以下文章