打字时如何自动更正QLineEdit?
How to have auto-correct QLineEdit when typing?
如何让 QLineEdit 在键入键时自动更正?
对于此示例,当您键入“<”时,我希望它自动更正为 "less than".
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
layout = QGridLayout()
self.setLayout(layout)
# auto complete options
names = ["Apple", "Alps", "Berry", "Cherry" ]
completer = QCompleter(names)
# create line edit and add auto complete
self.lineedit = QLineEdit()
self.lineedit.setCompleter(completer)
layout.addWidget(self.lineedit, 0, 0)
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())
您可以检查是否添加了字符,如果添加了,则替换 QLineEdit 文本。一种可能的实现可以覆盖 keyPressEvent 方法:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QCompleter, QGridLayout, QLineEdit, QWidget
class LineEdit(QLineEdit):
def __init__(self, mapping, parent=None):
super(LineEdit, self).__init__(parent)
self.mapping = mapping
def keyPressEvent(self, event):
last_text = self.text()
super(LineEdit, self).keyPressEvent(event)
new_text = self.text()
if last_text + event.text() == new_text:
new_text = self.mapping.get(event.text())
if new_text is not None:
self.setText(last_text + new_text)
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
layout = QGridLayout(self)
names = ["Apple", "Alps", "Berry", "Cherry"]
completer = QCompleter(names)
mapping = {"<": "less than", ">": "greater than", "'": "`"}
self.lineedit = LineEdit(mapping)
self.lineedit.setCompleter(completer)
layout.addWidget(self.lineedit, 0, 0)
if __name__ == "__main__":
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())
如何让 QLineEdit 在键入键时自动更正? 对于此示例,当您键入“<”时,我希望它自动更正为 "less than".
from PyQt5.QtWidgets import *
import sys
class Window(QWidget):
def __init__(self):
QWidget.__init__(self)
layout = QGridLayout()
self.setLayout(layout)
# auto complete options
names = ["Apple", "Alps", "Berry", "Cherry" ]
completer = QCompleter(names)
# create line edit and add auto complete
self.lineedit = QLineEdit()
self.lineedit.setCompleter(completer)
layout.addWidget(self.lineedit, 0, 0)
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())
您可以检查是否添加了字符,如果添加了,则替换 QLineEdit 文本。一种可能的实现可以覆盖 keyPressEvent 方法:
import sys
from PyQt5.QtCore import Qt
from PyQt5.QtWidgets import QApplication, QCompleter, QGridLayout, QLineEdit, QWidget
class LineEdit(QLineEdit):
def __init__(self, mapping, parent=None):
super(LineEdit, self).__init__(parent)
self.mapping = mapping
def keyPressEvent(self, event):
last_text = self.text()
super(LineEdit, self).keyPressEvent(event)
new_text = self.text()
if last_text + event.text() == new_text:
new_text = self.mapping.get(event.text())
if new_text is not None:
self.setText(last_text + new_text)
class Window(QWidget):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
layout = QGridLayout(self)
names = ["Apple", "Alps", "Berry", "Cherry"]
completer = QCompleter(names)
mapping = {"<": "less than", ">": "greater than", "'": "`"}
self.lineedit = LineEdit(mapping)
self.lineedit.setCompleter(completer)
layout.addWidget(self.lineedit, 0, 0)
if __name__ == "__main__":
app = QApplication(sys.argv)
screen = Window()
screen.show()
sys.exit(app.exec_())