|

楼主 |
发表于 2024-4-23 21:28:22
|
显示全部楼层
- 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()
复制代码
这个实现了我要的效果 |
|