import tkinter as tk
from pynput.keyboard import Controller, Listener, Key
class KeyMapperApp:
def __init__(self, root):
self.root = root
self.root.title("键盘映射器")
self.setup_ui()
self.keyboard = Controller()
self.listener = None
def setup_ui(self):
tk.Label(self.root, text="监听键:").grid(row=0, column=0)
self.listen_key_entry = tk.Entry(self.root)
self.listen_key_entry.grid(row=0, column=1)
tk.Label(self.root, text="映射键:").grid(row=1, column=0)
self.map_key_entry = tk.Entry(self.root)
self.map_key_entry.grid(row=1, column=1)
tk.Button(self.root, text="开始运行", command=self.start_mapping).grid(row=2, column=0)
tk.Button(self.root, text="退出", command=self.stop_mapping).grid(row=2, column=1)
def start_mapping(self):
self.listen_key = self.listen_key_entry.get().lower() # 强制转换为小写
self.map_key = self.map_key_entry.get().lower() # 强制转换为小写
# print(f"监听键:{self.listen_key}, 映射键:{self.map_key}")
# 启动键盘监听
self.listener = Listener(on_press=self.on_press, daemon=True)
self.listener.start()
def stop_mapping(self):
if self.listener:
self.listener.stop()
self.root.quit()
def on_press(self, key):
try:
key_char = key.char if hasattr(key, 'char') else ''
# print(f"按下了:{key_char}")
if key_char == self.listen_key:
self.keyboard.press(Key.backspace)
self.keyboard.release(Key.backspace)
self. keyboard.type(self.map_key)
self.keyboard.press(Key.tab)
self.keyboard.release(Key.tab)
# return False
except Exception as e:
print(f"Error: {e}")
if __name__ == "__main__":
root = tk.Tk()
app = KeyMapperApp(root)
root.mainloop()
这个实现了我要的效果 |