【问题标题】:Pause then Resume Pynput暂停然后恢复 Pynput
【发布时间】:2021-11-25 08:11:50
【问题描述】:

我正在尝试使它在我按下“esc”时暂停,然后在我按下“home”时恢复。那里大约有 90%,但是当我暂停脚本时,“a”按钮仍然起作用,就好像脚本没有暂停一样。我尝试在此脚本的其他位置放置睡眠,但这会由于线程而导致极度滞后。任何帮助将不胜感激。

import time
from threading import Thread
from pynput import keyboard
from pynput.mouse import Button, Controller
from pynput.keyboard import KeyCode

mouse = Controller()


def exit_program():
    def on_press(key):

        if key == KeyCode.from_char('a'):
            mouse.press(Button.right), mouse.release(Button.right)

        if str(key) == 'Key.esc':
            main.status = 'pause'
            print("Paused")

        if str(key) == 'Key.home':
            main.status = 'run'
            print("Resume")
        elif str(key) == 'Key.end':
            main.status = 'exit'
            print("Exit")
            exit()

    listener = keyboard.Listener(
        supress=True,
        on_press=on_press)
    listener.start()


def main():
    main.status = 'run'

    while True:
        print('running')
        time.sleep(1)

        while main.status == 'pause':
            time.sleep(1)

        if main.status == 'exit':
            print('Main program closing')
            break


Thread(target=main).start()
Thread(target=exit_program).start()

【问题讨论】:

  • on_press 中你可以在if main.status != 'pause': 中运行一些代码
  • 这对我有帮助。谢谢!

标签: python pynput


【解决方案1】:

您需要在on_press 中查看main.status。您应该仅在暂停时检查“a”和“esc”,仅在运行时检查“home”。

但是,实现这一点的更简洁的方法是使用适当的多线程通信原语。您可以使用设置为暂停并清除以恢复的threading.Event,或使用queue.queue 将消息从按键处理程序发送到主(事件队列)。这些可以让您完全摆脱睡眠呼叫。

【讨论】:

  • 谢谢老兄,我必须了解有关线程的更多信息,感谢您的帮助。
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多