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

Button on Floatlayout is Not working while executing code in kivy

我在浮动布局上有两个按钮都有 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 时,整个布局挂起并停止按钮不起作用。有人对这个问题有任何想法

这是因为 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()