Floatlayout上的按钮在kivy中执行代码时不起作用

时间:2017-09-17 07:00:37

标签: android python cross-platform kivy kivy-language

我在floatlayout上有两个按钮,它们都有on_press()事件

    Button:
        id: button1
        size_hint: .12,.12
        pos_hint:{"center_x":.30,"center_y":.065}
        on_press: root.speeak(textbox2.text)
    Button:
        id: button2
        size_hint: .12,.12
        #pos_hint:{"center_x":.50,"center_y":.065}
        on_press: root.stop()

按钮背后的方法

 def speeak(self,texts):
    self.texts = texts
    global speak
    speak = wincl.Dispatch("SAPI.SpVoice")
    speak.Speak(self.texts)

def stop(self,*args):
    speak.Pause()

当我按下按钮1整个布局挂起和停止按钮不起作用。有人对此问题有任何想法

1 个答案:

答案 0 :(得分:0)

这是因为代码会在speak.Speak(self.texts)处阻止,并且您无法暂停或执行任何操作,直到该行完成为止。解决此问题的一种方法是使用multithreading并使用线程运行speak.Speak(self.texts),这样您的主循环就不会受到影响。以下是您可以开始的示例:

import threading

def speeak(self, texts):
    self.texts = texts
    self.speak = wincl.Dispatch("SAPI.SpVoice")
    t = threading.Thread(target=self.speakStart, args=(self.texts,))
    t.daemon = True
    t.start()

def speakStart(self, text):
    self.speak.Speak(text)

def stop(self):
    self.speak.Pause()