2016-11-06 107 views
3

我正在爲GUI使用Python-3.5和Qt Creator開發聊天程序。PyQt:從QLineEdit中檢索值

首先,當輸入被按下時,它調用第一個函數run_chat。到現在爲止還挺好。但是當if聲明爲真時,我想獲取用戶輸入的下一個值並將其用於另一個函數。

問題是,當聲明爲真時,我按輸入,第一個函數被再次調用!

代碼:

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

你必須disconnect the signal首先將它連接到其他插槽前:

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) 

注意:如果沒有當前連接disconnect會引發錯誤。