python - 如何在 QTextEdit 中插入和清除占位符
解决方案
placeholderText属性仅存在于 Qt 5.2 中,因此我为 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_())
推荐阅读
- r - 用 rvest 抓取网站询问地理位置
- vue.js - Vuetify - 自动完成动态数组数据
- xcode - 如何阻止 xcode git 拾取其他 git 项目?
- converters - (PVRTexTool) 如何在 GUI 中选择多个图像?
- java - Android PdfRenderer位图图像保存到存储后失真
- wordpress - 本地后的 Wordpress 住一些 url 仍在使用本地 url
- android - Android UI,浮动操作按钮在 EditText 焦点之后被软键盘覆盖,然后是屏幕旋转
- react-native - 使用 this.state.maps 获取 React Native 中动态数组内的信息的 onChangeText
- reactjs - 在反应和 Web-API 项目之间连接 - 对象以 null 和 0 到达服务器
- sql - 如何获得今天最近 12 个月的日期?