Непропадающий фоновый текст QLineEdit

Нужно сделать так, чтобы в QLineEdit был фоновый текст и поверх него печатался новый. Использовал placeholderText(), но текст пропадает.

Хотел создать кастомный LineEdit наследовав от QLineEdit, но я даже не знаю с чего начать.

from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
from sys import argv, exit


class LineEdit(QLineEdit):
    def __init__(self, *args, **kwargs):
        QLineEdit.__init__(self, *args, **kwargs)


class Window(QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.setWindowTitle('LineEdit')
        self.setMinimumSize(640, 480)
        self.resize(640, 480)

        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName(u"centralwidget")
        self.verticalLayout = QVBoxLayout(self.centralwidget)
        self.verticalLayout.setObjectName(u"verticalLayout")

        lineedit = LineEdit('', self)

        self.verticalLayout.addWidget(lineedit)
        self.setCentralWidget(self.centralwidget)


if __name__ == "__main__":
    app = QApplication(argv)
    window = Window()
    window.show()

    exit(app.exec())

Ответы (1 шт):

Автор решения: S. Nick

Как вариант, разместить разные QLineEdit один поверх другого в менеджере компоновки QGridLayout.
Установите свои импорты и попробуйте:

from sys import argv, exit
'''
from PySide6.QtCore import *
from PySide6.QtGui import *
from PySide6.QtWidgets import *
'''
from PyQt5.Qt import *


class LineEdit(QLineEdit):
    def __init__(self, *args, **kwargs):
        QLineEdit.__init__(self, *args, **kwargs)
        self.setMinimumHeight(60)                                        # +++
        

class Window(QMainWindow):
    def __init__(self, parent=None):
        super(Window, self).__init__(parent)
        self.setWindowTitle('LineEdit')
        self.setMinimumSize(640, 480)
        self.resize(640, 480)

        self.centralwidget = QWidget(self)
        self.centralwidget.setObjectName(u"centralwidget")
        self.setCentralWidget(self.centralwidget)
        
        self.layout = QGridLayout(self.centralwidget)                # !!! + QGridLayout
        self.layout.setObjectName(u"layout")

        lineedit_bg = LineEdit('Непропадающий фоновый текст', self)    # !!! lineedit_bg 
        lineedit_bg.setObjectName(u"lineedit_bg")
        lineedit_bg.setStyleSheet('''
            #lineedit_bg {
                background-color: #FF7F50;
                color: #FFFF00;
                font-size: 40px;
            }
        ''')

        lineedit = LineEdit(self, placeholderText='Введите что-нибудь...') # !!! lineedit
        lineedit.setObjectName(u"lineedit")
        lineedit.setStyleSheet('''
            #lineedit {
                background-color: transparent;
                color: #0000CD;
                font-size: 35px;
            }
        ''')
# ---------------------------------------> v  v <------------------------- # !!!                
        self.layout.addWidget(lineedit_bg, 1, 1)
        self.layout.addWidget(lineedit,    1, 1)
# ---------------------------------------> ^  ^ <------------------------- # !!! 
        lineedit.setFocus()                                                # +++
        

if __name__ == "__main__":
    app = QApplication(argv)
    window = Window()
    window.show()
    exit(app.exec())

введите сюда описание изображения

введите сюда описание изображения

→ Ссылка