pyqt5-QPlainTextEdit文本域
1、介绍
QPlainTextEdit文本域组件
QPlainTextEdit(parent: typing.Optional[QWidget] = None)
QPlainTextEdit(text: str, parent: typing.Optional[QWidget] = None)
2、文本内容
2.1 纯文本
(1)setPlainText
setPlainText(self, text: str)
(2)appendPlainText
appendPlainText(self, text: str)
- 拼接纯文本,html代码文本会直接显示而不会渲染
- 当前组件已经存在文本,则在末尾换行拼接。当前组件不存在文本,则相当于直接设置
- 拼接的字符串中,不能包括\n换行符,否则窗口直接崩溃,不报异常,也无法try...except捕获处理。可以将字符串split分割,然后依次调用该方法拼接
- 拼接的文本,可能无法直接显示。
- 尝试了调用repaint方法,但未解决
- 待尝试切换pyqt版本
- 其它临时方法,比如可以鼠标拖动选择,然后自动会显示出文本,也可以用缩写到工具栏再打开,或者用其它软件覆盖再移开
- 如果是tab场景,可以设置自动切换到其它tab页再切换回来
(3)insertPlainText
insertPlainText(self, text: str)
- 在光标处插入纯文本。即使不聚焦组件,光标仍然存在,一般是在末尾处
- 不会进行换行操作
(4)toPlainText
toPlainText(self) -> str
- 获取组件显示内容,所见即所得
- 并不关心显示的字符是否由html实体编码设置,或者是否设置了样式,只获取可见字符
2.2 html
QPlainTextEdit组件写入html的方法只有一个,即appendHtml方法,没有读取html方法
appendHtml(self, html: str)
- 作用是拼接html代码的文本,进行一定的样式显示,区别于appendPlainText只添加普通文本
- 需要注意该方法对任意标签,无论该标签是否是合法html标签,是否开始标签和结束标签为同一标签名,是否为显示样式,都不会在组件中输出其开始标签和结束标签部分,而开始标签和结束标签之间的文本会直接输出
- 对于合法的html标签,并不一定会显示html样式,存在一定的限制
- 如果拼接前的组件中已经输出文本,会换行再输出。如果未输出,则直接在首行输出
(1)html元素样式
偏向于对文本的字体颜色、字号等属性进行显示,而其它html样式基本不显示
1)a标签
- 需要定义href属性,并且至少设置一个字符时,会显示为样式。
self.window.plainTextEdit.appendHtml('<a href="http://www.baidu.com">abcddddddddddd</a>123')
self.window.plainTextEdit.appendHtml('<a href=http://www.baidu.com>abcddddddddddd</a>123')
self.window.plainTextEdit.appendHtml('<a href=\'http://www.baidu.com\'>abcddddddddddd</a>123')
self.window.plainTextEdit.appendHtml('<a href=>abcddddddddddd</a>123')
self.window.plainTextEdit.appendHtml('<a href=#>abcddddddddddd</a>123')
self.window.plainTextEdit.appendHtml('<a>abcddddddddddd</a>123')
2)其它标签
self.window.plainTextEdit.appendHtml('<input type=input>123')
self.window.plainTextEdit.appendHtml('<adz href=\'http://www.baidu.com\'>abcddddzzdddddddd</az>123')
3)style属性
self.window.plainTextEdit.appendHtml('<span style=color:red>123</span>')
(2)html的空白符
一般来说,如果添加的文本中包括多个空白符,会被处理为单个空格。
可以用pre标签来嵌套,使得空白符不被合并。
但是,pre标签本身是块级元素,因此将其用于组件内整体嵌套为宜。否则的话,pre会导致分行
(3)html实体编码
appendHtml方法支持html实体编码
self.window.plainTextEdit.appendHtml('<span style=color:red>123</span>')
self.window.plainTextEdit.appendHtml('<span style=color:red>123<> abc</span>')
3、光标