Как в pyQT5 сделать неудаляемый символ?

В PyQT5 можно сделать символ неудаляемым, используя стандартные элементы управления QLineEdit или QTextEdit.

Для того чтобы реализовать такой функционал, можно использовать событие keyPressEvent, чтобы перехватить нажатия клавиш на клавиатуре. Например, если вы хотите, чтобы символ "@" был неудаляемым, то можно использовать следующий код:

from PyQt5.QtWidgets import QApplication, QLineEdit, QWidget
from PyQt5.QtCore import Qt

class CustomLineEdit(QLineEdit):
    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Backspace and self.selectedText() == "@":
            pass
        else:
            super().keyPressEvent(event)

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
        
        line_edit = CustomLineEdit()
        
        layout = QVBoxLayout()
        layout.addWidget(line_edit)
        
        self.setLayout(layout)

if __name__ == '__main__':
    app = QApplication([])
    window = MainWindow()
    window.show()
    app.exec_()

В данном примере мы наследуемся от класса QLineEdit и переопределяем метод keyPressEvent. Мы проверяем, если пользователь пытается удалить символ "@" с помощью клавиши Backspace и при этом этот символ выделен, то мы блокируем удаление этого символа. В остальных случаях мы вызываем оригинальную реализацию метода keyPressEvent.

Таким образом, символ "@" становится неудаляемым в элементе управления QLineEdit.