我是一个新手,开始在python中学习和开发程序我正在开发一个项目,需要通过音频队列通知用户。
我正在使用键盘模块(https://github.com/boppreh/keyboard)作为热键,因此当按下热键时它将运行一个功能。我的代码如下:
import win32com.client
from keyboard import add_hotkey
Hotkey = 'g'
add_hotkey(Hotkey, lambda: Notification('Hello'))
def Notification(value):
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak(value)
return
我遇到的问题是,当运行时脚本崩溃,我无法解决错误的原因: Python Console with error
答案 0 :(得分:0)
这是你想要做的事情: 从add_key回调调用时,需要对COM对象进行初始化。
这是官方文件:
在任何线程可以创建或操作COM对象之前,它必须 执行一些初步初始化以建立其关系 使用COM库。作为此过程的结果,COM创建了一个 适合初始化程序的公寓:CoInitialize 创建一个单线程单元(STA),而CoInitializeEx用 COINIT_MULTITHREADED标志产生一个多线程公寓。该 CoInitialize / CoInitializeEx调用不会初始化COM库 在全球范围内,只有调用线程使用它,因此它非常重要 请记住,这个初始化应该在每个线程上完成 基础。
以下是固定代码:
import keyboard
import win32com.client
import pythoncom
Hotkey = 'g'
def Notification(value):
pythoncom.CoInitialize()
speaker = win32com.client.Dispatch("SAPI.SpVoice")
speaker.Speak(value)
keyboard.add_hotkey(Hotkey, Notification, args=(["Hello"]))
keyboard.wait()