Python:在不退出代码的情况下使用相同的热键切换 while 循环

锡石

我正在尝试创建类似“垃圾邮件机器人”的东西(用于教育目的)。我想要这样的东西:当我按下键盘上的一个键(例如:f1)时,函数(while 循环)应该继续循环并仅在我再次按下同一个键时停止(在这个例子中:f1)。这是我制作的代码...

import pyautogui
from pynput import keyboard
import time
import threading

text = pyautogui.prompt('Text: ')
def text():
    while running:
        pyautogui.press('enter')
        pyautogui.write(text)
        pyautogui.press('enter')
        time.sleep(3)

def on_press(key):
    global running
    if key == keyboard.Key.f1:
        running = True
        t = threading.Thread(target=text)
        t.start()
    if key == keyboard.Key.f2:
        return False

def on_release(key):
    global running
    if key == keyboard.Key.f2:
        running = False
with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:
    listener.join()

但是,此代码使用 2 个不同的键来启动/停止(f1 和 f2),并在我按 f2 时退出程序。是否可以仅使用 1 个键来切换开始/停止?此外,当我按下“停止”键时,我不想退出程序,我希望它继续运行(能够随时启动/停止循环而不退出)。

深渊

您应该将running变量用作只有两种状态的简单状态机:

running = False

def on_press(key):
    global running
    if key == keyboard.Key.f1:
        running ^= True
        if running:
            t = threading.Thread(target=text)
            t.start()

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章