【发布时间】:2020-09-17 15:27:51
【问题描述】:
在代码的简化版本中:
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 调用;但是,由于我不再使用 for 警报框,有没有办法在该线程中“正确关闭”它并在另一个线程上操作它?
我有点不知所措,非常感谢任何输入或帮助。
【问题讨论】:
-
如果相关,这也在 Windows 10,python V 3.8.3 上运行
标签: python python-3.x python-multithreading pyautogui pynput