簡體   English   中英

我正在嘗試制作宏/熱鍵

[英]Im trying to make macro/hotkey

它只是不起作用我得到一個錯誤說

AttributeError: 'Controller' object has no attribute 'is_pressed'

代碼:

from pynput.mouse import Button, Controller
from pynput.keyboard import Key, Controller
from pynput.keyboard import Controller
from pynput import mouse
from pynput import keyboard

keyboard = Controller()

while True:
    if keyboard.is_pressed('u'):
        keyboard.press('w')
        keyboard.release('w')
       

有人可以幫我嗎!

pynput有特殊的 class Listener來捕捉按下的鍵。 它在線程中運行並且它不需要while True所以它不會阻塞主代碼。

ESC停止它。

from pynput.keyboard import Key, Controller, Listener

def on_press(key):
    print('{} pressed'.format(key))
    #print(dir(key))

    try:
        if key.char == 'u':
            keyboard.press('w')
            keyboard.release('w')
    except Exception as ex:
        print(ex)
    
def on_release(key):
    print('{} release'.format(key))

    if key == Key.esc:
        # Stop listener
        return False

# --- main ---

keyboard = Controller()

listener = Listener(on_press=on_press, on_release=on_release)

listener.start()

# ... other code ...

listener.join()

順便提一句:

如果您想在系統中使用全局宏/熱鍵並使用 Linux,那么您可以為此使用特殊程序AutoKey 它是用 Python 創建的,它具有創建宏/腳本/等的 GUI。

如果你想在系統中使用全局宏/熱鍵並使用 Windows 你寧願使用流行的AutoHotKey

如果您想在某些GUI程序中創建宏/熱鍵,那么您應該為此使用GUI函數。

查看文檔,下面是其中的一個片段。

全局熱鍵

鍵盤監視器的一個常見用例是對全局熱鍵做出反應。 由於偵聽器不維護任何 state,因此涉及多個鍵的熱鍵必須將此 state 存儲在某處。

為此, pynput提供了 class pynput.keyboard.HotKey 它包含兩種更新 state 的方法,旨在與鍵盤偵聽器輕松互操作: pynput.keyboard.HotKey.presspynput.keyboard.HotKey.release可以直接作為偵聽器回調傳遞。

[...]

這將創建一個熱鍵,然后使用偵聽器更新其 state。 一旦同時按下所有指定的鍵,就會調用on_activate

請注意,鍵在傳遞給HotKey實例之前通過pynput.keyboard.Listener.canonical傳遞。 這是為了從按鍵事件中刪除任何修飾符 state,並使用多個物理按鈕規范化修飾符。

方法pynput.keyboard.HotKey.parse是一種方便的 function 將快捷字符串轉換為鍵 collections。 請參閱其文檔以獲取更多信息。

要注冊多個全局熱鍵,請使用便捷的 class pynput.keyboard.GlobalHotKeys

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM