[英]QCompleter giving weird bug to lineEdit in pyqt5
我有兩個lineEdits設置,其中一個具有QCompleter設置。 當用戶選擇建議的文本時,兩個lineEdits都應使用建議的文本填寫。 逗號右邊的單詞進入第一行編輯,左邊的單詞進入第二行編輯。 目前,只有第二個lineEdit獲取其文本集,但是第一個lineEdit僅在再次按下回車鍵之后才獲取其文本集。 例如,如果用戶選擇“ chikin,pizza”並點擊輸入,則第二行Edit應該設置為chikin,第一個設置為pizza。 目前,第二行編輯確實會說chikin,但是第一個仍然會說“ chikin,pizza”,直到您再次按下Enter鍵為止。 我該如何解決它,使用戶不必再按兩次Enter鍵?
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_())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.