【问题标题】:PyQt: retrieving values from QLineEditPyQt:从 QLineEdit 中检索值
【发布时间】:2017-03-19 23:49:44
【问题描述】:

我正在使用 Python-3.5 和 Qt Creator 为 GUI 开发一个聊天程序。

首先,当按下 Enter 时,它会调用第一个名为 run_chat 的函数。到目前为止,一切都很好。但是当if 语句为真时,我想获取用户输入的下一个值并在另一个函数中使用它。

问题是,当语句为真并且我按下Enter时,第一个函数又被调用了!

代码:

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_())  

【问题讨论】:

    标签: python pyqt signals-slots qlineedit


    【解决方案1】:

    您必须先disconnect the signal,然后才能将其连接到另一个插槽:

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

    【讨论】:

      【解决方案2】:

      一个信号可以连接多次,所以当你在run_chat中重新连接returnPressed时,不会删除之前的连接。因此,您必须首先明确删除现有连接:

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

      注意:如果当前没有连接,disconnect 将引发错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-01
        • 1970-01-01
        • 2014-04-19
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多