QPlainTextEdit简介
QPlainTextEdit小部件是一个用于编辑和显示纯文本控件,QPlainTextEdit控件与QTextEdit控件使用了相同的技术和概念,但是它为纯文本处理提供了优化。QPlainTextEdit是一个支持纯文本的高级查看器/编辑器,可以处理大型文档并对用户输入做出快速响应。
QPlainTextEdit支持文本段落,在默认情况下,一个换行符表示一个段落,文档可以一个或者多个段落组成,且段落中的每个字符都可以有其自己的属性,例如有自己的字体和颜色。
QPlainTextEdit常用作文本显示器或文本编辑器。
QPlaintTextEdit常用方法:
- setPlainText(): 设置多行文本框的内容;
- insertPlainText(): 插入普通文本;
- appendPlainText(): 添加普通文本;
- appendHtml(): 添加HTML文本内容;
- setReadOnly(): 设置成只读模式;
- isReadOnly(): 是否是只读模式;
- setLineWrapMode():设置换行模式,取值为(QPlainTextEdit.NoWrap:不自动换行(缺省值),QPlainTextEdit.WidgetWidth: 根据文本框的宽度自动换行.);
- lineWrapMode(): 换行模式
QPlaintTextEdit中的常用信号:
- textChanged: 文本内容发生改变时触发;
- selectionChanged:选中内容发生改变时触发;
- cursorPositionChanged: 光标位置发生改变触发;
- copyAvailable:复制可用时触发
- redoAvailable: 重做可用触发
- undoAvailable: 撤销可用触发
QPlainTextEdit是一个功能强大的文本编辑器控件,有兴趣的童鞋可进一步研究。
QPlainTextEdit类继承关系:
测试QPlainTextEdit
测试程序实现简单的文本编辑器,可以新建,打开一个文本文件,然后进行编辑并保存。使用Qt Designer生成ui文件. 然后在代码中是有uic直接调用布局文件。创建文件qplaintextedit.py, 代码如下:
import sys,os
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtWidgets import (QApplication, QWidget, QPlainTextEdit, QToolButton, QStyle, QMessageBox, QFileDialog)
class DemoPlainTextEdit(QWidget):
def __init__(self, parent=None):
super(DemoPlainTextEdit, self).__init__(parent)
self.path = None
uic.loadUi(os.path.dirname(__file__) + '/textedit.ui', self)
self.btnNewFile.setIcon(QApplication.style().standardIcon(QStyle.SP_FileIcon))
self.btnNewFile.clicked.connect(self.onFileNew)
self.btnOpenFile.setIcon(QApplication.style().standardIcon(QStyle.SP_DialogOpenButton))
self.btnOpenFile.clicked.connect(self.onFileOpen)
self.btnSaveFile.setIcon(QApplication.style().standardIcon(QStyle.SP_DialogSaveButton))
self.btnSaveFile.clicked.connect(self.onSaveFile)
self.btnSaveFileAs.setIcon(QApplication.style().standardIcon(QStyle.SP_DialogSaveButton))
self.btnSaveFileAs.clicked.connect(self.onSaveFileAs)
def msgCritical(self, strInfo):
dlg = QMessageBox(self)
dlg.setIcon(QMessageBox.Critical)
dlg.setText(strInfo)
dlg.show()
def onFileNew(self):
self.txtEdit.clear()
def onFileOpen(self):
path, _ = QFileDialog.getOpenFileName(self, '打开文件', '', '文本文件 (*.txt)')
if path:
try:
with open(path, 'rU') as f:
text = f.read()
except Exception as e:
self.msgCritical(str(e))
else:
self.path = path
self.txtEdit.setPlainText(text)
def onSaveFile(self):
if self.path is None:
return self.onSaveFileAs()
self._saveToPath(self.path)
def onSaveFileAs(self):
path,_ = QFileDialog.getSaveFileName(self, '保存文件', '', '文本文件 (*.txt)')
if not path:
return
self._saveToPath(path)
def _saveToPath(self, path):
text = self.txtEdit.toPlainText()
try:
with open(path, 'w') as f:
f.write(text)
except Exception as e:
self.msgCritical(str(e))
else:
self.path = path
if __name__ == '__main__':
app = QApplication(sys.argv)
window = DemoPlainTextEdit()
window.show()
sys.exit(app.exec())
运行结果如图:
本文知识点
- QPlainTextEdit的基本功能;
- 使用uic在代码中导入ui文件;
- 使用QFileDialog打开文件对话框;
- 文本文件的读写操作。
喜欢本文内容就收藏,点赞,评论,关注和转发。