如何在 Python 中添加热键?

问题描述 投票:0回答:2

我正在为游戏制作一个机器人,我想在按下热键时调用该功能。我已经尝试了一些解决方案,但效果并不好。这是我的代码:

def start():
    while True:
        if keyboard.is_pressed('alt+s'):
            break
        ...

def main():
    while True:
        if keyboard.is_pressed('alt+p'):
            start()

这种方式很稳定,但会导致卡顿,我很难打字。

def main():
    keyboard.add_hotkey('alt+p', start, args=(), suppress=True, trigger_on_release=True)
    while True:
        # waiting for the user to press hotkey
        continue

据我所知,keyboard.add_hotkey 只返回输出,所以我无法在启动函数中停止循环。

有没有更好的解决方案?

python keyboard hotkeys
2个回答
0
投票

虽然这对你来说可能晚了,但如果他们发现这个可能会帮助其他人......

exit = false


def start():
    exit = true


def main():
    keyboard.add_hotkey('alt+p', start, suppress=True, trigger_on_release=True)
    while not exit:
        # put something here, you can't have an empty loop
    keyboard.remove_hotkey('alt+p')

当调用 main 时,这将添加一个热键,当触发时,将运行函数启动。然后它将进入 while 循环。 (请注意,除非您正在使用子处理,否则这将阻止其他一切继续进行,直到您离开循环)while 循环将运行到

exit = false
。删除热键可能是个好主意,尽管您可能也有理由不这么做。


0
投票
import keyboard
import time


class Listener:
    def __init__(self):
        self.__listKey = []
        self.__hotkey = {}
        self.__validKey = []

    def start(self):
        while True:
            key = keyboard.read_event()
            if key.name in self.__validKey and key.event_type == 'down':
                if key.name not in self.__listKey:
                    self.__listKey.append(key.name)
                _hotkey = '+'.join(self.__listKey)
                if _hotkey in self.__hotkey:
                    self.__hotkey[_hotkey][0](*self.__hotkey[_hotkey][1])
                else:
                    continue
            else:
                self.__listKey.clear()
                continue

    def addHotKey(self, hotkey, callback, *args):
        self.__hotkey[hotkey] = callback, args
        for _hotkey in hotkey.split('+'):
            self.__validKey.append(_hotkey)


def func():
    while True:
        print('Hello')
        time.sleep(0.5)
        if keyboard.is_pressed('alt+s'):
            break


def main():
    lis = Listener()
    lis.addHotKey('alt+b', func)
    lis.start()


main()
© www.soinside.com 2019 - 2024. All rights reserved.