[英]How do I play a tone of a given Hz while a key is pressed AND stop playing it when it is released?
[英]How do I stop a while loop when a key is pressed with Autokey?
我正在尝试在 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 但我发现的所有示例都在达到某个数字后循环停止,这些带有数字的示例与我尝试使用此类脚本实现的不同,所以我希望有人可以帮助我弄清楚这一点。
为此,您将不得不使用键盘模块,因为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
您可以使用evdev检查是否按下了某个键
通过查看python -m evdev.evtest
检查您的 InputDevice
然后检查是否按下了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()
乍一看,您的问题是您从不更新 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')”如何影响代码,如果它停止它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.