2017-11-21 17 views
0

pyqtで私のchatbot用のGuiを作っていますが、このコード領域に少し問題があります。PyQtでpyttsxを使用

def __init__(self): 
    super(Window, self).__init__() 
    self.setGeometry(50, 50, 500, 300) 
    self.setWindowTitle("Chatbot 0.3") 


def offline_speak(chat_speech): 
    engine = pyttsx.init() 
    engine.say(chat_speech) 
    engine.runAndWait() 

がいくつかようデフoffline_speak(自己)を変更します、その後のinitようself.offline_speak()の上にそれを言及するが、私はエンジンのコードについては考えています。

誰も私に何かを提案できますか?

答えて

0

offline_speak()をクラスのメソッドにする必要はありませんが、この作業は非常に時間がかかるため、Qtによって生成されたメインループをブロックする可能性がありますので、2番目のスレッドで実行することをおすすめしますQRunnableQThreadPool

import pyttsx 

from PyQt4.QtGui import * 
from PyQt4.QtCore import * 


class SpeechRunnable(QRunnable): 
    def __init__(self): 
     QRunnable.__init__(self) 
    def run(self): 
     self.engine = pyttsx.init() 
     self.engine.say(self.chat_speech) 
     self.engine.runAndWait() 

    def say(self, text): 
     self.chat_speech = text 
     QThreadPool.globalInstance().start(self) 

    def stop(self): 
     self.engine.stop() 


class Window(QWidget): 
    def __init__(self): 
     super(Window, self).__init__() 
     self.runnable = None 
     self.setWindowTitle("Chatbot 0.3") 
     lay = QVBoxLayout(self) 
     self.le = QLineEdit(text, self) 
     self.btnStart = QPushButton("start", self) 
     self.btnStop = QPushButton("stop", self) 
     self.btnStart.clicked.connect(self.onClickedStart) 
     lay.addWidget(self.le) 
     lay.addWidget(self.btnStart) 
     lay.addWidget(self.btnStop) 


    def onClickedStart(self): 
     self.runnable = SpeechRunnable() 
     self.runnable.say(self.le.text()) 
     self.btnStop.clicked.connect(self.runnable.stop) 

    def closeEvent(self, event): 
     if self.runnable is not None: 
      self.runnable.stop() 
      QThread.msleep(100) #delay 
     super(Window, self).closeEvent(event) 
text = """ 

What is Lorem Ipsum? 
Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
when an unknown printer took a galley of type and scrambled it to make a type specimen book. 
It has survived not only five centuries, but also the leap into electronic typesetting, 
remaining essentially unchanged. 
It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, 
and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum. 
""" 


if __name__ == "__main__": 
    import sys 

    app = QApplication(sys.argv) 
    w = Window() 
    w.show() 
    sys.exit(app.exec_()) 
+0

のヘルプには、それを得た回答いただきありがとうございますが、問題はスピーチでも、プログラムが閉じられて停止していないです。 mp3ファイルで保存して実行できますか? ありがとうもう一度:) –

+0

私はすでにエラーを修正して、それをチェックし、それがうまくいけば、それを正しいものとしてマークすることを忘れないでください。 – eyllanesc

+0

ありがとう、私はPyQt4を使用しています。私はPyQt5をPyQt4に変更しましたが、QtWidgetは持っていません。だから私はPyQt.Guiまたは何かと一緒に行く必要がありますか? –

関連する問題