1、QPlainText普通文本编辑器:主要针对纯文本进行处理(像表格等富文本 不支持),使用逐行逐段滚动方法替换像素精确高度计算。
2、占位文本和只读和字符格式:
①:占位提示文本:
通过文本字符格式设置纯文本的格式:
def 格式设置(self):
tcf = QTextCharFormat()
tcf.setFontUnderline(True)
tcf.setUnderlineColor(QColor(100, 200, 10))
self.pte.setCurrentCharFormat(tcf)
3、软换行模式和覆盖模式和tab控制:
(超过控件宽度自动进行换行)
覆盖模式:是否需要覆盖模式编辑文本。(一般都是一个字符一个字符的覆盖,成批量的就会变为插入)
def 覆盖模式(self):
print(self.te.overwriteMode())
self.pte.setOverwriteMode(True)
print(self.pte.overwriteMode())
Tab控制:
def Tab控制(self):
self.pte.setTabChangesFocus(True)
4、文本操作:设置是指将旧的全部替换成为新的。插入是指从光标处开始往后插入。追加:文档的末尾处追加。
获取整个文本框中的文本:print(self.pte.toPlainText())
def 文本操作(self):
# 会替换原来的文本
self.pte.setPlainText("itlike.com")
self.pte.insertPlainText("itlike")
self.pte.appendPlainText("<a href='https://www.itlike.com'>撩课</a>")
# 不支持表格等富文本,2行3列
table_str = "<table border=2>" \
"<tr><td>1</td><td>2</td><td>3</td></tr>" \
"<tr><td>4</td><td>5</td><td>6</td></tr>" \
"<table>"
# 获取整个文本框中的文本
print(self.pte.toPlainText())
5、块的操作:(限制插入文本中块的个数,即段落个数),当块的个数超过最大要求的个数时,会覆盖上边的块。
def 块的操作(self):
# 打印普通文本编辑器中现有的块的个数
# 文本编辑器中有一个默认的文本框
print(self.pte.blockCount())
# 设置最大块的个数,完全删除了之前的内容
self.pte.setMaximumBlockCount(3)
6、QPlainEdit常用编辑操作---放大缩小;同QTextEdit相同。
补充:方法和缩小(QTextEdit中也存在)
def 放大缩小(self):
# 放大,存放一个小于0的数是缩小功能
self.te.zoomIn(10)
# 缩小
self.te.zoomOut(10)
7、滚动内容以显示光标:控制文本框中的内容滚动,从而保证光标可见(处理大型的文本文档)。
光标一开始在某一行abc之后:点击测试按钮之后保证该行处于中间位置。
假设光标处于文本框中最后一行,设置可以中心滚动之后,文本框会自动留白,为文本滚动设置前提。
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QPlainEdit的学习")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
pte = QPlainTextEdit(self)
pte.resize(300, 300)
pte.move(100, 100)
self.pte = pte
self.滚动保证光标可见()
self.pte.setCenterOnScroll(True)
def 滚动保证光标可见(self):
# 尽可能保证光标所在的哪一行
# 光标所在的哪一行滚动到中间位置
self.pte.centerCursor()
self.pte.setFocus()
使用方法ensureCursorVisible(),保证光标可见,且移动距离为最短距离。
def 滚动保证光标可见(self):
# 尽可能保证光标所在的哪一行
# 光标所在的哪一行滚动到中间位置
#self.pte.centerCursor()
self.pte.ensureCursorVisible()
self.pte.setFocus()
8、光标操作:(有些方法可以去调用,但不意味着他会生效)
获取指定位置的文本光标对象(整个文档的任何一个位置都对应一个隐藏的文本光标对象)。只要拿到文本光标对象,在对应位置插入一些东西就可以生效。
可以重写该对象的mousePressEvent方法获取点的坐标。
例如给定坐标(100, 60),由于该位置没有文本,x无法达到该范围,故光标会选择就近的文本显示。
def 光标操作(self):
tc = self.pte.textCursor()
# 光标跳转到指定位置,就近选择文本
tc = self.pte.cursorForPosition(QPoint(100, 60))
print(tc)
tc.insertText("itlike")
self.pte.setFocus()
设置、获取文本光标的宽度:
def 光标操作(self):
tc = self.pte.textCursor()
# 无任何效果,因为普通文本编辑器不支持富文本编辑
# tc.insertImage(r"D:\Desktop\OIP-C.jpg")
# tc.insertTable(5, 6)
# 光标跳转到指定位置,就近选择文本
tc = self.pte.cursorForPosition(QPoint(100, 60))
print(tc)
tc.insertText("itlike")
self.pte.setCursorWidth(20)
self.pte.setFocus()
借助文本光标的移动去控制一个锚点、一个文本光标点,可以控制选中效果。
从当前光标位置到末尾选中:
def 光标操作(self):
tc = self.pte.textCursor()
print(tc)
tc.insertText("itlike")
# 移动到文档的末尾,要一个选中效果
self.pte.moveCursor(QTextCursor.End, QTextCursor.KeepAnchor)
self.pte.setFocus()