带有Pynput和pyautogui的Tcl_AsyncDelete

问题描述 投票:1回答:1

在简化的代码中:

from pynput import keyboard
import time
import pyautogui


class Test:
    def __init__(self):
        self.paused = False

    def on_activate(self):
        if self.paused:
            pyautogui.alert(text='was paused', title='title', button='button')
            self.paused = False
        elif self.paused is False:
            pyautogui.alert(text='was not paused', title='title', button='button')
            self.paused = True


test = Test()
pyautogui.alert(text='test', title='title', button='button')
hotkey = keyboard.GlobalHotKeys({
    '<ctrl>+a': test.on_activate
})
hotkey.start()

while True:
    time.sleep(1)

我将收到错误Tcl_AsyncDelete: async handler deleted by the wrong thread

现在,我了解到,这是由于处理线程问题所致,或者说缺乏上述处理能力。我注意到,如果代码运行时没有类声明下面的alert();永远不会有这样的错误。

我相信我知道这是由于pynput在另一个pyautogui调用之前在另一个线程上工作;但是,由于我不再使用警报框了,因此有一种方法可以“适当地关闭”该线程并在另一个线程上对其进行操作?

我有些不知所措,我们将不胜感激。

python python-3.x python-multithreading pyautogui pynput
1个回答
0
投票
看来,我设法找到了一种解决方法。就目前的情况而言,“解决方案”就是根本不对这些提示使用pyautogui,而是为每个监听器调用的每个调用构建一个唯一的tkinter框。我得到的最终代码是:
© www.soinside.com 2019 - 2024. All rights reserved.