Pyside - Select all text when QLineEdit gets focus

pyside, python, qlineedit, qt

Solution

With `focusInEvent`, when you click the widget, it gets executed, but since you click, it removes the selected text.

To overcome this, we must use the `mousePressEvent`, this can be done two ways:

import sys
from PySide.QtGui import QLineEdit, QApplication, QVBoxLayout, QWidget
class MyLineEdit(QLineEdit):
    def __init__(self, parent=None):
        super(MyLineEdit, self).__init__(parent)

    def mousePressEvent(self, e):
        self.selectAll()      

app = QApplication(sys.argv)
top = QWidget()
layout = QVBoxLayout()
layout.addWidget(MyLineEdit())
layout.addWidget(MyLineEdit())
top.setLayout(layout)
top.show()
app.exec_()

Or you can do it by simply overriding the base `QLineEdit` class:

txt_demo = QtGui.QLineEdit()
txt_demo.mousePressEvent = lambda _ : txt_demo.selectAll()

However, since we are modifying the `mousePressEvent`, whenever you try to click text, it will always select all first.

Problem

I am new to Qt/PySide. I want `QLineEdit` to select all text in it when it gets focus. After getting focus and selecting all text, it should select all text only after focus is lost and gained again. It should not select all text when I change cursor position after `QLineEdit` gains focus. How do I do that? Update: My current code improved as suggested by Ashwani Kumar. I still can't get it to work though: ``` import sys from PySide.QtGui import QLineEdit, QApplication, QVBoxLayout, QWidget class MyLineEdit(QLineEdit): def __init__(self, parent=None): super(MyLineEdit, self).__init__(parent) def focusInEvent(self, e): self.selectAll() app = QApplication(sys.argv) top = QWidget() layout = QVBoxLayout() layout.addWidget(MyLineEdit()) layout.addWidget(MyLineEdit()) top.setLayout(layout) top.show() app.exec_() ```

Original source