2016-11-06 7 views
3

私はGUI用のPython-3.5とQt Creatorを使ってチャットプログラムを開発しています。PyQt:QLineEditから値を取得する

最初にと入力すると、と入力すると、run_chatという最初の関数が呼び出されます。ここまでは順調ですね。しかし、ifステートメントが真の場合、ユーザーが入力した次の値を取得して別の関数で使用したいと考えています。

ステートメントがtrueのときにを入力すると、と入力すると、最初の関数が再度呼び出されます。

コード:別のスロットに接続する前に、最初のdisconnect the signalにあなたが持っている

B = cursor.execute('SELECT Respond FROM Welcoming_Engine ORDER BY RANDOM()').fetchone() 

class Ui(QtWidgets.QDialog): 
    def __init__(self): 
     super(Ui, self).__init__() 
     uic.loadUi('chatbotgui.ui', self) 
     self.show() 
     #--------------------------------------------# 
     self.textBrowser.append('المساعد: ' + B[0]) 
     #self.pushButton.clicked.connect(self.run_chat) 
     self.lineEdit.returnPressed.connect(self.run_chat) 
     #--------------------------------------------# 

    def exit(self): 
     H= self.lineEdit.text() 
     self.textBrowser.append('انت: ' + H) 
     classifier1 = nltk.NaiveBayesClassifier.train(t1) 
     test_sent_features = {word.lower(): (word in word_tokenize(H)) for word in all_words1} 
     sent_result= classifier1.classify(test_sent_features) 
     if sent_result == 'Positive': 
      B= cursor.execute('SELECT Respond FROM Goodbye_Engine ORDER BY RANDOM()').fetchone() 
      cursor.execute('DELETE FROM chatting_log') 
      connection.commit() 
      self.textBrowser.append('المساعد: ' + B[0]) 
     else: 
      B= "اسف!! سوف اعمل على تطوير نفسي" 
      self.textBrowser.append('المساعد: ' + B[0]) 

    def run_chat(self): 
     H= self.lineEdit.text() 
     self.textBrowser.append('انت: ' + H) 
     self.lineEdit.clear() 
     if re.search(r'باي|الى اللقاء',H): 
      B ='تقييمك لعملي؟' 
      self.textBrowser.append('المساعد: ' + B) 
      self.lineEdit.returnPressed.connect(self.exit) 
     else: 
      New_H= PreProcess_text(H) 
      self.textBrowser.append('المساعد: ' + New_H) 

if __name__ == '__main__': 

    app = QtWidgets.QApplication(sys.argv) 
    window = Ui() 
    sys.exit(app.exec_()) 

答えて

0

if re.search(r'باي|الى اللقاء',H): 
    ... 
    self.lineEdit.returnPressed.disconnect(self.run_chat) 
    self.lineEdit.returnPressed.connect(self.exit) 
0

信号を複数回接続することができ、run_chatにおけるので、あなたはときに再接続しreturnPressed以前の接続は削除されません。このため、明示的に最初に既存の接続を削除する必要があります。

try: 
     self.lineEdit.returnPressed.disconnect() 
    except TypeError: 
     pass 
    self.lineEdit.returnPressed.connect(self.exit) 

NBを:なし現在の接続がない場合disconnectはエラーが発生します。

関連する問題