本篇Pyside6的第十篇,依旧是开启新功能。纯文本编辑器。
❝与QTextEdit功能相似,但针对纯文本处理进行了优化,差异:
QPlainTextEdit是一个简略版的类,使用QTextEdit和QTextDocument作为背后实现的技术支撑 性能优于QTextEdit
❞
先看源码
class QPlainTextEdit(QAbstractScrollArea): """ QPlainTextEdit(self, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None QPlainTextEdit(self, text: str, parent: Optional[PySide6.QtWidgets.QWidget] = None) -> None """
from PySide6.QtWidgets import QApplication, QWidget, QPlainTextEdit class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.setWindowTitle("QPlainTextEdit") self.setGeometry(300, 300, 500, 300) self.UI() def UI(self): self.ptext = QPlainTextEdit("QPlainTextEdit", self) self.ptext1 = QPlainTextEdit(self) self.ptext1.setGeometry(300, 150, 150, 80) self.show() if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝它没有QTextEdit的setText等方法,往下慢慢看。
❞
文本设置
setPlainText(text: str) 清空先前的文本,将编辑器中的文本设置为text。 insertPlainText(text: str) 在当前光标位置插入纯文本text appendPlainText(text: str) 将text作为一个新的段落,插入到文本编辑器末尾 appendHtml(html: str) 将html作为一个新的段落插入到末尾 toPlainText() -> str 将当前编辑器中的文本作为纯文本返回
from PySide6.QtWidgets import QApplication, QWidget, QPlainTextEdit class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.setWindowTitle("QPlainTextEdit") self.setGeometry(300, 300, 500, 300) self.UI() def UI(self): self.ptext = QPlainTextEdit("QPlainTextEdit", self) self.ptext.insertPlainText("这个控件是QPlainTextEdit \n") # 在光标处插入文本,没有指定光标默认在首个字符 self.ptext.appendPlainText(" 我添加了一段文字") # 在文章末尾处添加文本 # self.ptext.setPlaceholderText("这是提示性文字") # 插入提示性文字,不被获取 print(self.ptext.toPlainText()) # 将当前编辑器中的文本作为纯文本返回 self.show() if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
❝以上就是一点点的文本效果了。
看看下面的图中的方法,QPlainTextEdit提供了很多文本方法,也是可以写HTML等。
❞
信号与槽
.textChanged() 当文档的内容发生变化时发射此信号。例如文本插入删除或应用格式等 .selectionChanged() 当选中改变时发射此信号 .blockCountChanged() 当文档中块的数量发生变化时发射此信号,新的块数量作为参数传出 .cursorPositionChanged() 当光标位置改变时发射此信号 .copyAvailable(yes: bool) 当复制功能可用状态发生变化时发射此信号,可用状态作为参数传出 .undoAvailable(available: bool) 当撤销功能可用状态发生变化时发射此信号,可用状态作为参数传出 .redoAvailable(available: bool) 当重做功能可用状态发生变化时发射此信号,可用状态作为参数传出 .updateRequest(rect: QRect, dy: int) 当文本文档需要更新指定的矩形时发射此信号。详情见下一节的案例 .modificationChanged(changed: bool) 当文档的内容以影响修改状态的方式发生变化时发射此信号,文档是否已被修改作为参数传出
❝信号很多,但是实际常用的并没有这么多。挑几个来玩一玩
❞
from PySide6.QtWidgets import QApplication, QWidget, QPlainTextEdit, QPushButton class Edit(QWidget): def __init__(self): super(Edit, self).__init__() self.setWindowTitle("QPlainTextEdit") self.setGeometry(300, 300, 580, 300) self.UI() def UI(self): self.ptext = QPlainTextEdit(self) print(self.ptext.sizeHint()) # 获取控件大小 self.btnAdd = QPushButton("添加", self) self.btnAdd.setGeometry(260, 50, 40, 30) self.btnClear = QPushButton("清除", self) self.btnClear.setGeometry(260, 90, 40, 30) self.ptext1 = QPlainTextEdit(self) self.ptext1.setGeometry(310, 0, 256, 192) self.btnAdd.clicked.connect(self.addText) self.btnClear.clicked.connect(self.clearText) self.ptext.textChanged.connect(self.addText) # 文本发生变化时触发 self.ptext.selectionChanged.connect(self.clearText) # 当选中改变时发射此信号 self.show() def addText(self): text = self.ptext.toPlainText() self.ptext1.insertPlainText(text + '\n') def clearText(self): self.ptext.clear() self.ptext1.clear() if __name__ == '__main__': app = QApplication([]) edit = Edit() app.exec()
最后,代码地址:
https://gitee.com/qinganan_admin/Pyside6_Information/tree/master/%E7%AC%AC%E5%85%AD%E7%AB%A0%EF%BC%8C%E7%BA%AF%E6%96%87%E6%9C%ACQPlainTextEdit