問題描述
我設置了兩個 lineEdit,其中一個設置了 QCompleter.當用戶選擇建議的文本時,兩個 lineEdits 都應填寫建議的文本.逗號右邊的詞進入第一行編輯,左邊的詞進入第二行編輯.目前,只有第二個 lineEdit 獲得了它的文本集,但第一個 lineEdit 在再次按 Enter 后才獲得它的文本集.例如,如果用戶選擇chikin,pizza"并點擊進入第二行編輯應該設置為chikin,第一個設置為pizza.目前,第二行編輯確實說 chikin,但第一個仍然說chikin,pizza",直到您再次按 Enter 鍵.我怎樣才能解決它,以便用戶不必按兩次回車?
I have two lineEdits set up where one of them has a QCompleter setup to it. When a user selects the suggested text, both lineEdits should be filled in with the suggested text. The word to the right of the comma goes into the first lineedit and the word to the left goes into the second lineEdit. At the moment, only the second lineEdit gets its text set, but the first one only gets its text set after hitting enter again. For example, if a user selects "chikin, pizza" and hits enter the second lineEdit should be set to chikin and the first one set to pizza. Currently, the second lineedit does say chikin, but the first one still says "chikin, pizza" until you hit enter again. How can i fix it so that the user doesn't have to hit enter twice?
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QCompleter
class Ui_MainWindow(object):
def on_button(self):
print('Button clicked')
fullName = self.lineEdit.text()
nameList = fullName.split(', ')
firstName = nameList[1]
lastName = nameList[0]
self.lineEdit_2.setText(lastName)
self.lineEdit.setText(firstName)
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(439, 254)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(20, 90, 180, 25))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(240, 90, 180, 25))
self.lineEdit_2.setObjectName("lineEdit_2")
food = ["pizza, chikin", "chikin, pizza", "chikin, pizza pizza", "chikin, pizza", "fried, pizza"]
completer = QCompleter(food)
completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
completer.setFilterMode(QtCore.Qt.MatchContains)
self.lineEdit.setCompleter(completer)
self.lineEdit.editingFinished.connect(lambda: self.on_button())
MainWindow.setCentralWidget(self.centralwidget)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
推薦答案
試試看:
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QCompleter
class Ui_MainWindow(object):
# def on_button(self):
def on_button(self, text): # +++
nameList = text.split(', ')
self.lineEdit_2.setText(nameList[0])
# self.lineEdit.setText(nameList[1])
QtCore.QTimer.singleShot(200, lambda: self.lineEdit.setText(nameList[1])) # +++
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(439, 254)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit.setGeometry(QtCore.QRect(20, 90, 180, 25))
self.lineEdit.setObjectName("lineEdit")
self.lineEdit_2 = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_2.setGeometry(QtCore.QRect(240, 90, 180, 25))
self.lineEdit_2.setObjectName("lineEdit_2")
food = ["pizza, chikin", "chikin, pizza", "chikin, pizza pizza", "chikin, pizza", "fried, pizza"]
completer = QCompleter(food)
completer.setCaseSensitivity(QtCore.Qt.CaseInsensitive)
completer.setFilterMode(QtCore.Qt.MatchContains)
self.lineEdit.setCompleter(completer)
# self.lineEdit.editingFinished.connect(lambda: self.on_button())
completer.activated.connect(self.on_button) # +++
MainWindow.setCentralWidget(self.centralwidget)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
MainWindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
這篇關于QCompleter 給 pyqt5 中的 lineEdit 帶來奇怪的錯誤的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!