一、概述

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

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

二、属性

文本编辑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进行详细介绍。大家可以参考概述部分老猿提供的参考文档或者官网文档。

老猿Python,跟老猿学Python!

PyQt(Python+Qt)学习随笔:纯文本编辑器QPlainTextEdit功能详解的更多相关文章

  1. PyQt(Python+Qt)学习随笔:利用QWidget部件的palette以及ColorGroup、colorRole局部调整部件的特定范围颜色

    专栏:Python基础教程目录 专栏:使用PyQt开发图形界面Python应用 专栏:PyQt入门学习 老猿Python博文目录 在<PyQt(Python+Qt)学习随笔:QWidget部件的 ...

  2. PyQt(Python+Qt)学习随笔:Qt Designer中部件的accessibleDescription和accessibleName辅助阅读属性

    accessibleDescription和accessibleName属性都是用于残疾人辅助阅读的,这两个属性都有国际化属性(关于国际化请参考<PyQt(Python+Qt)学习随笔:Qt D ...

  3. PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox增加自定义按钮的方法

    在Qt Designer中可以预先定义标准按钮,相关支持的标准按钮请见<PyQt(Python+Qt)学习随笔:Designer中的QDialogButtonBox的StandardButton ...

  4. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性不能覆盖写的问题

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dra ...

  5. PyQt(Python+Qt)学习随笔:视图中类QAbstractItemView的dragDropOverwriteMode属性

    老猿Python博文目录 老猿Python博客地址 一.属性的作用 dragDropOverwriteMode属性用于控制视图的拖放行为,如果其值为True,则视图中选定的数据将在拖拽数据放下时被覆盖 ...

  6. PyQt(Python+Qt)学习随笔:视图中的dragDropMode属性对dragEnabled和acceptDrops属性的影响

    老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系&g ...

  7. PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled和dragDropMode属性的关系

    老猿Python博文目录 老猿Python博客地址 在<PyQt(Python+Qt)学习随笔:QAbstractItemView的dragEnabled属性的困惑>中,老猿觉得dragE ...

  8. PyQt(Python+Qt)学习随笔:视图中的拖放操作注意事项

    老猿Python博文目录 老猿Python博客地址 在通过PyQt构建的图形界面中进行拖放,要成功进行拖放需要注意: 视图相关属性需要支持拖放,具体相关属性请参考<PyQt(Python+Qt) ...

  9. PyQt(Python+Qt)学习随笔:Qt Designer中部件的autoFillBackground属性

    autoFillBackground属性可以确认部件背景是否自动填充,如果自动填充,Qt会在调用Paint事件之前填充部件的背景.使用的颜色由部件调色板中的QPalette.window 角色定义(关 ...

随机推荐

  1. 使用pipenv管理python虚拟环境

    前言 近期的项目中,我开始尝试着从virtualenv管理python虚拟环境,切换到用pipenv来管理. 经过一段时间的使用,着实觉得pipenv使用的更加顺手,更加的便捷.这当然也延续了 Ken ...

  2. Windows窗口置顶工具 简简单单 - 快快乐乐

    Windows窗口置顶工具 简简单单 - 快快乐乐 JERRY_Z. ~ 2020 / 11 / 12 转载请注明出处!️ 目录 Windows窗口置顶工具 简简单单 - 快快乐乐 一.官网下载Des ...

  3. KepServer与S7-1200PLC之间的OPC通信配置

    对于学习上位机开发,有一种通信方式是必须要了解的,那就是OPC是OLE for Process Control的简称,然而随着技术的不断发展,人们开始对它有了新的定义,比如Open Platform ...

  4. 基于FFmpeg的Dxva2硬解码及Direct3D显示(二)

    解析视频源 目录 解析视频源 获取视频流 解析视频流 说明:这篇博文分为"获取视频流"和"解析视频流"两个部分,使用的是FFmpeg4.1的版本,与网上流传的低 ...

  5. Vue2.x 响应式部分源码阅读记录

    之前也用了一段时间Vue,对其用法也较为熟练了,但是对各种用法和各种api使用都是只知其然而不知其所以然.最近利用空闲时间尝试的去看看Vue的源码,以便更了解其具体原理实现,跟着学习学习. Proxy ...

  6. MySQL时间类型datetime、bigint及timestamp的查询效率

    前期数据准备 通过程序往数据库插入 50w 数据 数据表: CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `time_dat ...

  7. nginx开启目录浏览

    使用nginx作为下载站点,开启目录浏览的功能 在/etc/nginx/sites-enabled/default中添加: autoindex on ; autoindex_exact_size of ...

  8. linux笔记【简版】

    1.linux简介 kernel 内核 shell 外壳 (类似win上的cmd) sh,Bash:#root,$user csh:#root,%user filesystem 文件管理系统 2.优势 ...

  9. if __name__ == "__main__"的疑惑

    Python中if __name__ == "__main__"详细解释: 想必很多初次接触python都会见到这样一个语句,if __name__ == "__main ...

  10. IAR设置字体

    1.IAR设置字体 第一种方法可以在IDE环境下,选择Tools -> option -> Editor - > Colors and Fonts,然后右边的Editor Font就 ...