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

2024-09-30 00:27:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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整个布局挂起和停止按钮不工作。有人知道这个问题吗


Tags: posselfidsizeonbuttonroot按钮
1条回答
网友
1楼 · 发布于 2024-09-30 00:27:48

这是因为代码在speak.Speak(self.texts)处阻塞,在该行完成之前,您将无法暂停或执行任何操作。解决这个问题的一种方法是使用^{}并使用线程来运行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()

相关问题 更多 >

    热门问题