3

我正在尝试在 Linux Mint 上使用Autokey(不是常规 Python)编写一个小脚本,该脚本按下一个键并在按下另一个特定键后停止,但在按下此特定键后我无法让它停止循环。

我得到了循环工作,但我不能让它停止。

import time
a = True
b = keyboard.press_key('s')
keyboard.release_key('s')
while a:
    keyboard.send_key("a", repeat=5)
    time.sleep(2)
    if b:
        break

所以这会无限期地输出字母“a”,在我按“s”后它不会停止,我不知道我做错了什么

我阅读了有关 while 函数和 break 的信息,但我发现的所有示例都是在达到某个数字后循环停止,这些数字示例与我尝试使用这种脚本实现的不同,所以我希望有人可以帮助我弄清楚这一点。

4

3 回答 3

2

您将不得不为此使用键盘模块,因为press_key用于“按下”不检测的键。

如果你还没有安装键盘,你可以通过 cmd 来安装, pip install keyboard

之后您可以在python中添加代码如下,按“q”将打印“a”5次,按“s”将停止程序。

import keyboard
while True: 
   if keyboard.is_pressed('q'):  # pressing q will print a 5 times
      for i in range(5):
         print("a")
      break  
   elif keyboard.is_pressed('s'): # pressing s will stop the program
      break
于 2021-08-19T20:35:37.460 回答
0

您可以使用evdev检查是否按下了某个键

通过查看检查您的 InputDevicepython -m evdev.evtest

然后检查是否s按下了键:

import evdev
from evdev import ecodes as e

device = evdev.InputDevice('/dev/input/event7')

if e.KEY_S in device.active_keys():
    do_something()
于 2021-11-20T12:03:25.740 回答
-2

乍一看,您的问题是您从不更新 b 的值,并且它仅在循环之前分配。你可能应该尝试这样的事情:

import time
a = True
keyboard.release_key('s')
while a:
    keyboard.send_key("a", repeat=5)
    b = keyboard.press_key('s')
    time.sleep(2)
    if b:
        break

我不知道“b = keyboard.press_key('s')”如何影响代码,如果它停止的话。

于 2021-08-19T20:20:02.190 回答