Захотел я в общем перерисовать стандартный QLineEdit.
class ClineEdit(QLineEdit):
def paintEvent(self, event):
qp = QPainter()
qp.begin(self)
#Цвета текста и фона
qp.setPen(QColor(255,255,255))
qp.setBrush(QColor(20,200,255))
#Рисуем рамку для QLineEdit
qp.drawRect(QRect(0,0,132,19))
#Рисуем текст
qp.drawText(event.rect(), Qt.AlignRight, 'QT')
qp.end()
class MyWindow(QWidget):
def __init__(self):
super().__init__()
self.window()
def window (self):
self.setWindowTitle('lol')
self.resize(270, 100)
cline = ClineEdit()
#Выравнивнивание и отображение на QWidget
vbox = QHBoxLayout()
vbox.addWidget(cline)
self.setLayout(vbox)
if __name__ == '__main__':
import sys
app = QApplication(sys.argv)
window = MyWindow()
window.show()
sys.exit(app.exec_())
Код выше некорректно работает. Вводимый текст пользователем вообще не отображает, почему то два текста “Qt”. (попробуйте у себя запустить). Я так понял, там QlineEdit на QlineEdit наложились. Нужно, чтобы был перерисованный QLineEdit поверх которого надпись Qt, и, также пользовать мог вводить текст с клавиатуры и он отображался. Если решу эту проблему(кто-нибудь может поможет или до самого дойдет), решу проблемы с placeholdertext. Что я сделал не так, кто может подсказать?
P.S. Я понимаю, что цвет фона и цвет рамки можно задать по другому, через setPalette или setStyleSheet, но меня интересует изменение этих параметров именно через paintEvent, ведь с помощью paintEvent можно и скругленные поля сделать и еще много интересных приблуд.