How to insert and clear placeholder in QTextEdit

给你一囗甜甜゛ 提交于 2021-01-29 04:17:10

问题


I have a QTextEdit with setText() already but I want a the placeholder to clear when user selects the Edit Text. Illustration shown here


回答1:


The placeholderText property only exists from Qt 5.2 so I have implemented the same logic for PyQt4:

from PyQt4 import QtCore, QtGui


class TextEdit(QtGui.QTextEdit):
    @property
    def placeholderText(self):
        if not hasattr(self, "_placeholderText"):
            self._placeholderText = ""
        return self._placeholderText

    @placeholderText.setter
    def placeholderText(self, text):
        self._placeholderText = text
        self.update()

    def isPreediting(self):
        lay = self.textCursor().block().layout()
        if lay and lay.preeditAreaText():
            return True
        return False

    def paintEvent(self, event):
        super(TextEdit, self).paintEvent(event)

        if (
            self.placeholderText
            and self.document().isEmpty()
            and not self.isPreediting()
        ):
            painter = QtGui.QPainter(self.viewport())
            col = self.palette().text().color()
            col.setAlpha(128)
            painter.setPen(col)
            margin = int(self.document().documentMargin())
            painter.drawText(
                self.viewport().rect().adjusted(margin, margin, -margin, -margin),
                QtCore.Qt.AlignTop | QtCore.Qt.TextWordWrap,
                self.placeholderText,
            )


if __name__ == "__main__":
    import sys

    app = QtGui.QApplication(sys.argv)

    te = TextEdit()
    te.placeholderText = "Stack Overflow"

    w = QtGui.QWidget()
    lay = QtGui.QVBoxLayout(w)
    lay.addWidget(QtGui.QLineEdit())
    lay.addWidget(te)
    w.show()
    sys.exit(app.exec_())


来源:https://stackoverflow.com/questions/56966714/how-to-insert-and-clear-placeholder-in-qtextedit

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!