как убрать курсор в QLineedit - PullRequest
2 голосов
/ 18 июня 2019

Это мой пример программы для Qlineedit Completer. После AutoSuggestion я хочу отобразить текст как начало элемента в строке редактирования для этого я написал completer.activated.connect(lambda: QTimer.singleShot(0, lambda: edit.home(False))). Работает нормально, но я не хочу показывать курсор в начале и после автопредставления.

Ниже приведен мой код:

import sys
from PyQt4.QtCore import Qt,QTimer
from PyQt4.QtGui import QApplication, QCompleter, QLineEdit, QStringListModel

def get_data(model):
   model.setStringList(["completionProgramxxxxxxxxxxxxxxx", "completionProgramyyyyyy","truthordisabled", "storecredit", "iamhere"])

if __name__ == "__main__":

    app = QApplication(sys.argv)
    edit = QLineEdit()
    completer = QCompleter()
    edit.setCompleter(completer)
    completer.activated.connect(lambda:  QTimer.singleShot(0, lambda: edit.home(False)))

    model = QStringListModel()
    completer.setModel(model)
    get_data(model)
    edit.show()
    sys.exit(app.exec_())

у меня получилось изображение вот так:

enter image description here

1 Ответ

2 голосов
/ 18 июня 2019

Вы должны очистить фокус:

import sys
from PyQt4 import QtCore, QtGui


def get_data(model):
    model.setStringList(
        [
            "completionProgramxxxxxxxxxxxxxxx",
            "completionProgramyyyyyy",
            "truthordisabled",
            "storecredit",
            "iamhere",
        ]
    )


class Completer(QtGui.QCompleter):
    def __init__(self, parent=None):
        super(Completer, self).__init__(parent)
        self.activated.connect(self.on_activated)

    @QtCore.pyqtSlot()
    def on_activated(self):
        le = self.widget()
        if isinstance(le, QtGui.QLineEdit):
            le.home(False)
            le.clearFocus()


if __name__ == "__main__":

    app = QtGui.QApplication(sys.argv)
    edit = QtGui.QLineEdit()
    completer = Completer(edit)
    edit.setCompleter(completer)
    model = QtGui.QStringListModel(edit)
    completer.setModel(model)
    get_data(model)
    edit.show()
    sys.exit(app.exec_())
...