一、概述
QPlainTextEdit是用于纯文本的一个高级文档编辑器部件,为支持处理大文档和快速响应用户输入进行了特定优化。QPlainTextEdit处理文本是按段和字符,段落是一个格式化的字符串,界面换行会以适应编辑部件的宽度方式以整词词为单位进行。默认情况下,纯文本中的一个换行符表示一个段落。文档由零个或多个段落组成。段落中的每个字符都有自己的属性,例如字体和颜色。

PyQt的文本处理提供了一系列丰富的类,包括QTextDocument、QTextCharFormat、QTextCursor、QTextBlock、QTextList、QTextFrame、QTextTable、QTextBlockFormat、QTextListFormat、QTextFrameFormat、QTextTableFormat等,如果要介绍清楚需要花比较多的时间,因此本部分不展开进行介绍。推荐大家按如下两篇文章了解:

QTextEdit和QTextDocument
Qt之文本编辑
二、属性
文本编辑QPlainTextEdit在Designer中可以设置的属性如下:

可以看到QPlainTextEdit的属性与QTextEdit的属性很多是相同的。

tabChangesFocus:tabChangesFocus属性控制tab键是否更改焦点还是接受为输入。在某些情况下,文本编辑不应允许用户使用Tab键输入制表符或更改缩进,因为这样会打断焦点链,默认值为False,可通过tabChangesFocus()和setTabChangesFocus()方法来访问
documentTitle:documentTitle属性保存文档标题。默认情况下,对于新创建的空文档,此属性包含空字符串。可以通过方法documentTitle()、setDocumentTitle()来访问。
undoRedoEnabled:undoRedoEnabled属性用于控制是否启用undo和redo,默认是启用,可以通过方法isUndoRedoEnabled()、setUndoRedoEnabled()来访问
lineWrapMode:lineWrapMode属性用于控制换行模式,其类型为枚举类型QPlainTextEdit.LineWrapMode,缺省值为WidgetWidth,表示以词为单位在编辑器右边换行,换行出现在空白处,保持整个单词的完整性。可以调用方法lineWrapMode()、setLineWrapMode()来访问该属性。如果不以词为单位来换行,则需要调用setWordWrapMode来改变词换行的策略。如果设置换行模式为NoWrap 则不会换行。
readOnly:readOnly 用于控制编辑器内是否只读,默认为False,可以通过isReadOnly()、setReadOnly()进行访问
plainText:plainText属性为编辑器中的文本内容,可以通过方法toPlainText()、setPlainText()来进行属性访问,当通过setPlainText来改变文本内容时,也会触发textChanged()信号
overwriteMode:overwriteMode属性用于控制用户输入文本是否替换现有文本,如果为True,则输入字符从当前光标位置开始逐一替换当前的字符,为False则在光标处插入输入字符。缺省值为False,可以通过方法overwriteMode()、setOverwriteMode()进行访问
tabStopWidth:tabStopWidth属性用于控制编辑器中输入tab键时移动的像素数,默认值为80像素,可以通过方法tabStopWidth()、setTabStopWidth()来访问,不过该属性在Qt 5.10以后版本中被下面的tabStopDistance所替代,在5.13的文档中就没有该属性,但实际上类方法还是支持的,tabStopWidth与tabStopDistance的唯一区别是前者为整型、后者为浮点数,更精确,在Designer中二者的值也是联动的,tabStopWidth改变直接修改tabStopDistance为tabStopWidth的值,如果tabStopDistance值改变,则将tabStopDistance四舍五入后的值作为tabStopWidth的值,最终生成的代码tabStopDistance、tabStopWidth都会设置,这个与QTextEdit不同
cursorWidth:cursorWidth用于设置编辑器光标的像素为单位的宽度,缺省值为1,可通过方法cursorWidth() 、setCursorWidth()来访问
textInteractionFlags:textInteractionFlags属性用于控制编辑器怎么响应用户的输入,其类型为Qt.TextInteractionFlags,用于控制编辑器是否可键盘或鼠标选择文本、是否可编辑、链接是否鼠标或键盘访问等,缺省值依赖于编辑器是否只读,可通过textInteractionFlags()、setTextInteractionFlags()方法访问,具体枚举类型值参考官方文档
maximumBlockCount:maximumBlockCount属性用于控制编辑器中文档最大的块数,如果设定该属性的值时文档的块数已经超出了该值,则会从文档的开头去除多余的块数。如果值为0或负数表示文档的块数不受限制,缺省值为0,可通过方法maximumBlockCount()、setMaximumBlockCount()访问该属性的值
注:块是文本编辑器处理文件的单位,一个文档由一系列块组成,块由 QTextBlock对象表示,使用QTextBlockFormat来控制块的格式特征信息,块的类型可以是文本段、表格、列表、图像等
backgroundVisible:backgroundVisible属性用于控制背景调色板在文档外区域是否可见,如果设置为True,编辑器视口中没有文本覆盖的部分也会使用调色板绘制背景,否择不绘制。该功能使用户能够直观地区分使用调色板的基色绘制的文档区域和任何文档未覆盖的空白区域。如图:

centerOnScroll:centerOnScroll属性保留光标是否应在屏幕上居中。如果设置为True,则纯文本编辑将垂直滚动文档,使光标在视口中心可见。这也允许文本编辑滚动到文档末尾下方。否则,如果设置为False,则纯文本编辑将滚动尽可能小的数量以确保光标可见。默认值为False,可以通过方法centerOnScroll()、setCenterOnScroll()进行访问
placeholderText:placeholderText为编辑器的占位符,当编辑器中无文字时以灰色显示在编辑器中,一旦输入字符自动清除,可通过方法placeholderText()、setPlaceholderText()访问
三、重要方法
下面复杂的方法会介绍调用语法,不复杂的方法就不介绍调用语法,大家可以官方文档速查:

appendHtml()方法:槽方法,用于在编辑器末尾增加一段参数所指的html文本。虽然QPlainTextEdit是个纯文本编辑器,但也是可以解析html报文的,使用appendHtml方法将html报文增加后,在界面上显示的是解析后的内容
案例:
使用appendHtml和appendPlainText将同一段html报文加

html = '''<link  href="https://blog.csdn.net/LaoYuanPython"/><title>老猿Python</title><div>老猿Python网址:https://blog.csdn.net/LaoYuanPython</div>'''
self.plainTextEdit.appendHtml(html)
self.plainTextEdit.appendPlainText('\n************************************************\n')
self.plainTextEdit.appendPlainText(html)


执行后界面显示效果如下:

在这里插入图片描述
appendPlainText():槽方法,用于在编辑器末尾增加一段参数所指的纯文本
blockCount()方法:用于获取文档中的块数,空文档的块数为1
canPaste()方法:用于返回是否可以从剪切板中粘贴文本到编辑器中
clear()方法:槽方法,清楚编辑器中所有文本,redo/undo历史也会被清除
copy()方法:槽方法,用于将编辑器中选中文本拷贝到剪切板中
cut()方法:槽方法,用于将编辑器中选中文本拷贝到剪切板中后删除
createStandardContextMenu()方法:
这个方法都用于创建在编辑器中使用鼠标右键时显示的弹出菜单,只不过有带参和不带参的两种调用方式,带参数的是在文档中指定位置弹出,这样可以实现在编辑器的不同位置会弹出不同的快捷菜单。调用语法:createStandardContextMenu()、createStandardContextMenu(QPoint position)
currentCharFormat()方法:返回当前的字符格式,其类型为QTextCharFormat,QTextCharFormat用于控制QTextEdit中的文本格式(这些文本的存储类型为QTextDocument对象,可以通过QTextEdit的document()方法获取,关于QTextCharFormat和QTextDocument对象在本文中不详细介绍),这些文本格式控制信息用于指定文本的一些可视化格式,如同超文本中的可视化格式控制信息
cursorForPosition()方法:返回指定位置的QTextCursor文本光标对象,QTextCursor文本光标是通过模拟文本编辑器中光标行为的编程接口,用于访问和修改文本文档的内容和底层结构的对象。QTextCursor包含有关光标在QTextDocument中的位置及其所做的任何选择的信息。QTextCursor是根据文本光标在文本编辑器中的行为方式建模的,它提供了通过用户界面执行标准操作的编程方法。
document()方法:document方法返回文本编辑器依赖的QTextDocument文档管理对象,通过该对象可以对文本进行丰富的操作,可以调用setDocument方法改变文本编辑器的文档对象
ensureCursorVisible()方法:使用该方法确保编辑器中的光标可见,如果当前不可见则可以滚动文本
find()方法:在编辑器中查找指定字符串,调用语法:
bool find(str exp, QTextDocument.FindFlags options =
QTextDocument.FindFlags())
bool find(QRegExp exp, QTextDocument.FindFlags options =
QTextDocument.FindFlags())
其中的exp可以是普通字符串,也可是QRegExp 类型的正则表达式,其中options用于指定是向前或向后查找、查找时是否匹配大小写、是否整词匹配,具体取值请参考官方文档。当exp为正则表达式则是否匹配大小写的选项被忽略,而是由正则表达式来控制是否匹配大小写

insertPlainText()方法:将参数给定文本插入当前位置
moveCursor()方法:控制编辑器中光标进行移动,调用语法:moveCursor(operation, mode = QTextCursor.MoveAnchor),其中operation为枚举类型QTextCursor.MoveOperation,用于控制光标的移动方式,如移动到文档开始、移动到行首等,具体取值参考官方文档,mode 为枚举类型QTextCursor.MoveMode,具体取值参考官方文档
paste()方法:paste是槽方法,将剪切板的文本拷贝到当前位置
redo()、undo()方法:undo、redo是槽方法,undo()方法执行后可以使用redo重新执行最后一次的操作
selectAll()方法:selectAll是槽方法,选择所有文本
setCurrentCharFormat()方法:设置文本格式控制信息,调用语法:setCurrentCharFormat(QTextCharFormat format)
setTextCursor()方法:setTextCursor方法用于设置当前可见的光标对象,调用语法:setTextCursor(QTextCursor cursor),当前光标对象可通过textCursor()方法获取
zoomIn()、zoomOut()方法:两者都是槽方法,放大或缩小文本字体的大小指定参数大小,基本字体大小可以通过setFontPointSize设置
四、信号
blockCountChanged(int newBlockCount):当文本中块数发生变化时发射该信号,参数为最新的块数
copyAvailable(bool yes):当文本被选中或去选中时发射该信号,表示是否可拷贝,选中是yes为True,去选中时为False
cursorPositionChanged():光标位置改变时发射该信号
modificationChanged(bool changed):文档的内容发生改变(包括undo和redo操作引发的文档内容改变)时就发射该信号
redoAvailable(bool available):当redo的状态发生变化时发射该信号
:selectionChanged():当选择文本发生变化时发射该信号
textChanged():当文本内容发生变化时发射该信号
undoAvailable(bool available):当undo的状态发生变化时发射该信号
updateRequest(QRect rect, int dy):当文本文档需要更新指定的rect区域时,会发出此信号。如果文本是滚动的,rect将覆盖整个视区。如果文本是垂直滚动的,则dy携带滚动的视区像素数。该信号的目的是支持纯文本编辑子类中的额外部件,例如显示行号、断点或其他额外信息。
五、小结
QPlainTextEdit的很多功能支持技术与 QTextEdit相同。与QTextEdit相同,QPlainTextEdit中的文本对象依赖于QTextDocument类进行管理,QTextDocument类借助QTextCursor可以对文本进行丰富的操作。但限于时间和篇幅,本文并没有对QTextDocument和QTextCursor进行详细介绍。大家可以参考概述部分老猿提供的参考文档或者官网文档。
————————————————
版权声明:本文为CSDN博主「LaoYuanPython」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/LaoYuanPython/article/details/105610233

一、概述QPlainTextEdit是用于纯文本的一个高级文档编辑器部件,为支持处理大文档和快速响应用户输入进行了特定优化。QPlainTextEdit处理文本是按段和字符,段落是一个格式化的字符串,界面换行会以适应编辑部件的宽度方式以整词词为单位进行。默认情况下,纯文本中的一个换行符表示一个段落。文档由零个或多个段落组成。段落中的每个字符都有自己的属性,例如字体和颜色。PyQt的文本处理提供了一系列丰富的类,包括QTextDocument、QTextCharFormat、QTextCursor、QT 提供带有一些相关信息的状态栏 记住会话之间的GUI状态的至少一个方面(例如几何图形),并在重新启动应用程序时恢复该方面 该模块是使用 Python 3.6和 PyQt 5编写并测试的 完成了什么: 一个简单的菜单栏,带有标准的“文件”和“编辑”菜单 一个TextArea小部件,用户可以在其中编写一些限制为140个字符的 文本 (达到限制时-StatusBar上会显示一条相对消息) 工具栏,允许用户修改选定的 文本 StatusBar的其他信息,例如:。 项目名称。 一个用户。 用户输入的字符数 状态栏,显示常规消息(菜单操作悬停和140限制通知)以及一些其他信息 它可以记住M
写完工程视图,应该进入编辑区视图了。这个项目虽然大部分完成了,期间也查过大量关于QsciScintilla的资料,可是到现在我还是对它懵懵懂懂,一知半解。真是不知道如何说起。csdn有个博主theXX_SHI 的一篇文章介绍得很好,QScintilla for Python 中文文档请前往阅读。我这里直接贴源码,源码尽量增加注释,方便读者阅读。 1.c语法的高亮显示 MyLexerCPP继承自Qs...
暑假在家时自学了一段时间的 python ,开学后学校要求写一个多 文本 文档 编辑器 。听说 Qt designer和 PyQt 5结合起来写代码会非常方便,做出来的界面比tkinter和wx Python 好看许多,于是决定试一试。我在文件加载部分参照了《 Python Qt GUI快速编程》的代码,为了保存文件加粗、颜色等.txt不能保存的格式,于是在文件保存过程中又增加.html类型。 程序里的图标文件可以在ic...
import time from PyQt 5 import uic, Qt Core from PyQt 5. Qt Core import QT hread, pyqt Signal from PyQt 5. Qt Widgets import QApplication class AppendThread( QT hread): # 追加线程
QPlainTextEdit 是一个多行 文本 编辑器 ,用于显示和编辑多行简单 文本 。另外,还有一个 QT extEdit 组件,是一个所见即所得的可以编辑带格式 文本 的组件,以 HTML 格式标记符定义 文本 格式。 实例 samp4_6 演示 QPlainTextEdit (和 QComboBox)的使用,其运行时界面如图 1 所示。 图 1 实例运行界面 从《QComboBox》一节中的代码实现己经...
PyQt 5_ QT extEdit_多行富文 是一个高级的WYSIWYG(What You See Is What You Get 所见即所得)查看器/ 编辑器 ,支持使用HTML样式标签的富 文本 格式。 支持的HTML4标签子集:Supported HTML Subset | Qt GUI 5.15.13 如果不够, 可以考虑使用WebKit( Qt 中专门的浏览器,可以加载HTML样式标签的富 文本 内容) 它经过优化,可以处理大型文档并快速响应用户输入。 适用于段落和字符(如果 文本 太大而无法在 文本 编辑的视口中查看,则
我想在一个程序中操作一个 QT extEdit的对象的光标,但是失败了 当时调用的方法是 ui->textEdit->textCursor().movePosition( QT extCursor::NextWord, QT extCursor::KeepAnchor) 但是程序执行总是失败. 最后发现了原因 要想使操作生效需要调用一下setTextCursor()函数 QT extCurs
from PyQt 5. Qt Gui import QIcon from PyQt 5. Qt Widgets import QFileDialog,QColorDialog,QApplication, QT extEdit,QFontDialog,QDialog,QWidget,QPushButton from PyQt 5. Qt PrintSupport import Q...
PyCharm 是一款 Python 集成开发环境(IDE),可以方便地进行 Python 的开发、调试和测试。 PyQt 5 是一个用于 Python 编程语言的 GUI 框架,可以实现图形用户界面的开发。在 PyCharm 中使用 PyQt 5 可以帮助你更快、更方便地进行 GUI 程序的开发。 下面是使用 PyCharm 和 PyQt 5 进行 GUI 程序开发的步骤: 1. 安装 PyCharm 首先,需要从 PyCharm 官网下载并安装 PyCharm。可以选择社区版或专业版,社区版是免费的,专业版需要付费。 2. 安装 PyQt 5 可以使用 pip 工具安装 PyQt 5,命令如下: pip install pyqt 5 3. 创建 PyCharm 项目 打开 PyCharm,点击 "Create New Project" 创建一个新的项目。 4. 创建 PyQt 5 窗口 在项目中创建一个 Python 文件,并编写 PyQt 5 窗口的代码。以下是一个简单的 PyQt 5 窗口例子: ``` python import sys from PyQt 5. Qt Widgets import QApplication, QWidget if __name__ == '__main__': app = QApplication(sys.argv) window = QWidget() window.setWindowTitle(' PyQt 5 Example') window.setGeometry(100, 100, 300, 200) window.show() sys.exit(app.exec_()) 5. 运行程序 在 PyCharm 中点击 "Run" 按钮运行程序,就可以看到创建的 PyQt 5 窗口了。 以上就是使用 PyCharm 和 PyQt 5 进行 GUI 程序开发的基本步骤。当然,还有很多其他的组件和 功能 可以用来开发更复杂的 GUI 程序。