Я создаю небольшую программу, которая использует tkinter и pyttsx для взаимодействия с пользователем.По какой-то причине сценарий завершает работу после того, как он сказал «нажал кнопку», в то время как он должен оставаться в основном цикле.Даже более странно, он даже не проходит «контрольную точку», которую я добавил ниже основного цикла.
Вот упрощенная версия кода, который выдает ошибку:
import Tkinter as tk
import pyttsx
def button_click():
engine.say('button clicked')
engine.runAndWait()
engine = pyttsx.init()
root = tk.Tk()
gameframe = tk.Frame(root)
gameframe.pack()
readybutton = tk.Button(gameframe, text = 'click', command = button_click)
readybutton.pack()
root.mainloop()
print('checkpoint')
Как решить эту проблему?
Обновление: через Google я обнаружил некоторые признаки того, что эта проблема может иметь отношение как к tkinter, так и к pyttsx с использованием циклов событий, а также с тем, как модули Apple Foundation и / или ObjC обрабатывают события.Так как я новичок в Python, я не очень хорошо понимаю это, но некоторые из вас могут, см. http://comments.gmane.org/gmane.comp.python.pyobjc.devel/5965.
Я также нашел почти слишком простой, специфичный для Mac обходной путь, который избегает использования pyttsxполностью:
import os
phrase = 'button clicked'
os.system("/usr/bin/say " + phrase)
Это хорошо работает, также в сочетании с tkinter: -)