Вы должны реализовать делегат из AVSpeechSynthesizer
и добавить следующий код:
var myText = "This is my text, which will be detect on text-to-speech operation"
override func viewDidLoad() {
super.viewDidLoad()
speechSynthesizer.delegate = self
}
Реализовано willSpeakRangeOfSpeechString
, которое будет называть каждое произнесенное слово системой в текстовой строке. Вы можете реализовать метод contains()
типа String
для обнаружения конкретной строки в вашем тексте.
extension TextToSpeechVC: AVSpeechSynthesizerDelegate {
func speechSynthesizer(_ synthesizer: AVSpeechSynthesizer, willSpeakRangeOfSpeechString characterRange: NSRange, utterance: AVSpeechUtterance) {
let string = self.myText[characterRange.lowerBound..<characterRange.upperBound]
if string.trim == "operation" {
print("string = \(string)")
}
}
}
Добавить расширение String
для индекса диапазона.
extension String {
var trim: String {
return self.trimmingCharacters(in: .whitespacesAndNewlines)
}
subscript (bounds: CountableClosedRange<Int>) -> String {
let start = index(startIndex, offsetBy: bounds.lowerBound)
let end = index(startIndex, offsetBy: bounds.upperBound)
return String(self[start...end])
}
subscript (bounds: CountableRange<Int>) -> String {
let start = index(startIndex, offsetBy: bounds.lowerBound)
let end = index(startIndex, offsetBy: bounds.upperBound)
return String(self[start..<end])
}
}
Надеюсь, это поможет вам.
wx.TextCtrl
имеет стиль, названный wx.TE_READONLY
. Используйте это для создания его только для чтения.
Как sidenode, можно использовать C++ wxWidgets Руководство для wxPython также. Где специальная обработка для wxPython или других портов требуется, руководство часто указывает на различие.
Если Вы используете wx. StaticText () Вы можете просто:
def __init__(self, parent, *args, **kwargs): #frame constructor, etc.
self.some_text = wx.StaticText(panel, wx.ID_ANY, label="Awaiting MySQL Data", style=wx.ALIGN_CENTER)
def someFunction(self):
mysql_data = databasemodel.returnData() #query your database to return a string
self.some_text.SetLabel(mysql_data)
Как litb упомянутый, wxWidgets документы часто намного легче использовать, чем wxPython документы . Чтобы видеть, что SetLabel () функция может быть применен к wx. Экземпляр StaticText, необходимо путешествовать иерархия пространства имен в wxPython документах wxWindow суперкласс , от который wx. StaticText разделяется на подклассы. Существует несколько вещей, отличающихся в wxPython от wxWidgets, и это может быть сложно для обнаружения, каковы они. К счастью, много времени, различиями являются функции удобства, которые были добавлены к wxPython и не найдены в wxWidgets.