ich versuche gerade eine Anwendung zu schreiben, die Sprache erkennt und in einem Textfeld in Tkinter das Erkannte ausgibt. Leider wird das Event der Spracherkennung nur in der Klasse ContextEvents ausgeführt. Versucht man aus dieser Klasse heraus auf eine Methode in Tkinter der Klasse dictation zuzugreifen stürzt die GUI ab und macht nichts mehr.
Was mache ich falsch, oder gibt es vieleicht andere Lösungen?
Code: Alles auswählen
from win32com.client import constants
import win32com.client
import pythoncom
from Tkinter import *
class dictation:
""" Initialize the speech recognition with the passed in list of words """
def __init__(self):
self.test = 'test'
self.speaker = win32com.client.Dispatch("SAPI.SpVoice")
self.listener = win32com.client.Dispatch("SAPI.SpSharedRecognizer")
self.context = self.listener.CreateRecoContext()
self.grammar = self.context.CreateGrammar(1)
self.grammar.DictationSetState(1)
self.eventHandler = ContextEvents(self.context)
self.say("Started successfully")
self.fenster = Tk()
self.text = Text(self.fenster)
self.text.pack()
#self.eventHandler.init(self)
self.fenster.mainloop()
def say(self, phrase):
self.speaker.Speak(phrase)
def addMenueleiste(self):
self.menueleiste = Menu(self.fenster)
self.fenster.configure(menu=self.menueleiste)
def addDateimenue(self):
self.dateimenue=Menu(self.menueleiste)
self.dateimenue.add_command(label='Ende', command=self.beenden)
self.menueleiste.add_cascade(label="Datei", menu=self.dateimenue)
def beenden(self):
self.fenster.destroy()
# **** Hier stürzt TKinter ab, nachdem die Methode aus der Klasse
#ContextEvents aufgerufen wurde und den Befehl insert ausführt ***
def say_hi(self, text):
self.text.insert(END, text)
class ContextEvents(win32com.client.getevents("SAPI.SpSharedRecoContext")):
def init(self, obj):
self.obj = obj
def OnRecognition(self, StreamNumber, StreamPosition, RecognitionType, Result):
newResult = win32com.client.Dispatch(Result)
print "You said: ",newResult.PhraseInfo.GetText()
self.obj.say_hi(newResult.PhraseInfo.GetText())
if __name__=='__main__':
speechReco = dictation()