Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Pyside - Select all text when QLineEdit gets focus

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_()
like image 718
Suresh Subedi Avatar asked Dec 09 '22 08:12

Suresh Subedi


1 Answers

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.

like image 200
Danny M Avatar answered Dec 11 '22 12:12

Danny M