我正在使用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_())
答案 0 :(得分:0)
在将其连接到另一个广告位之前,您必须先disconnect the signal:
if re.search(r'باي|الى اللقاء',H):
...
self.lineEdit.returnPressed.disconnect(self.run_chat)
self.lineEdit.returnPressed.connect(self.exit)
答案 1 :(得分:0)
信号可以连接多次,因此当您重新连接returnPressed
中的run_chat
时,它不会删除以前的连接。因此,您必须首先明确删除现有连接:
try:
self.lineEdit.returnPressed.disconnect()
except TypeError:
pass
self.lineEdit.returnPressed.connect(self.exit)
注意:如果没有当前连接,disconnect
将引发错误。