python教程

QTextEdit-文本内容操作

发布日期:2021年2月6日 11:37
阅读:2945
作者:Python GUI编程网

QTextEdit-文本内容操作

00:00 / 01:23
1x
2x
1.5x
1.25x
1x
0.8x
0.5x

QTextEdit-文本内容操作

################################
# PyQt5中文网 - PyQt5全套视频教程 #
#    https://www.PyQt5.cn/     #
#         主讲: 村长            #
################################

from PyQt5.Qt import *
import sys
'''
占位提示文本:
setPlaceholderText()   placeholderText() 
'''

class Window(QWidget):
    def __init__(self):
        super().__init__()
        self.setWindowTitle("QTextEdit-文本内容操作 - PyQt5中文网")
        self.resize(600, 500)
        self.func_list()

    def func_list(self):
        self.func()
        # self.place_hold()
        self.text_set()

    def func(self):
        self.qte = QTextEdit('111', self)
        self.qte.move(100, 100)
        self.qte.resize(250, 250)
        self.qte.setStyleSheet('background-color:green')
        self.qte.setFrameStyle(QFrame.Box | QFrame.Raised)
        self.qte.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
        self.qte.setHorizontalScrollBarPolicy(Qt.ScrollBarAsNeeded)

        self.btn = QPushButton('按  钮', self)
        self.btn.move(120, 50)
        self.btn.resize(70, 30)
        self.btn.pressed.connect(self.text_cur)

# ==============占位提示文本=============== # 代码分割线 - 开始
#     def place_hold(self):
#         self.qte.setPlaceholderText('在这里输入文本内容')
# ==============占位提示文本=============== # 代码分割线 - 结束

# ==============内容设置=============== # 代码分割线 - 开始
    # 普通文本和富文本
    def text_set(self):
        # self.qte.setPlainText('<h1>AAAAA</h1>')
        # self.qte.insertPlainText('<h1>AAAAA</h1>')  # 这个方法不会清空原有的setText()中的文本内容,文本会放在前面
        # print(self.qte.toPlainText())  # 获取
        # self.qte.setHtml('<h1>AAAAA</h1>')   # 插入富文本
        # self.qte.insertHtml('<h1>AAAAA</h1>')
        # print(self.qte.toHtml())  # 会输出整个HTML网页完整模板代码
        self.qte.setText('<h1>AAAAA</h1>')  # 遇到富文本格式自动渲染

    # 追加文本和清空文本
    def add_clear(self):
        self.qte.append('<h1>AAAAA</h1>')  # 会追加到原文本的结尾,并自动识别文本类型
        self.qte.clear()  # 配合信号来测试

    # 文本光标完成内容和格式设置
    def text_cur(self):
        # 1.首先创建一个光标对象;2.通过光标插入文本,传入上面的格式对象;# 3.插入文本内容格式
        # self.qte.document()  # 获取文本文档的方法,返回QTextDocument
        # self.qte.textCursor()  # cursor是直接操作鼠标的方法,textCursor是操作光标的
        '''
        # 插入文本
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入文本内容格式
        tcf = QTextCharFormat()  # 创建一个格式对象
        tcf.setToolTip('pyqt5中文网')  # 设置提示文本
        tcf.setFontFamily('楷书')  # 设置字体
        tcf.setFontPointSize(25)  # 设置字体大小
        # 2.通过光标插入文本,传入上面的格式对象
        qtc.insertText('www.PyQt5.cn' , tcf)
        qtc.insertHtml("<a href='https://www.pyqt5.cn'>PyQt5中文网</a>")

        # 插入图片
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入图片内容格式
        tcf = QTextImageFormat()
        tcf.setName('123.jpg')
        tcf.setWidth(40)
        tcf.setHeight(40)
        # 2.通过光标插入文本,传入上面的格式对象
        qtc.insertImage(tcf)

        # 插入文件
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入文件内容格式
        tcf = QTextDocumentFragment().fromHtml("<a href='https://www.pyqt5.cn'>PyQt5中文网</a>")  # 插入富文本
        # tcf.fromHtml("<a href='https://www.pyqt5.cn'>PyQt5中文网</a>") # fromHtml有返回值,所以必须给个变量名,这样写就错了
        # tcf = QTextDocumentFragment().fromPlainText("<a href='https://www.pyqt5.cn'>PyQt5中文网</a>") # 插入普通文本
        # 2.通过光标插入文本,传入上面的格式对象
        qtc.insertFragment(tcf)

        # 插入列表1
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入文本内容格式
        # tcf = QTextList()
        # tcf.count()
        # 2.通过光标插入文本,传入上面的格式对象
        tcf = qtc.insertList(QTextListFormat.ListDecimal)  # 返回一个QTextList对象
        # qtc.createList(QTextListFormat.ListDecimal)
        print(tcf.item(3))

        # 插入列表2
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入文本内容格式
        tcf = QTextListFormat()
        tcf.setNumberPrefix('$')  # 列表前缀,必须要加上setStyle,设置为数字
        tcf.setIndent(2)  # 缩进一个Tab
        tcf.setStyle(QTextListFormat.ListDecimal)
        # 2.通过光标插入文本,传入上面的格式对象
        qtc.insertList(tcf)

        # 插入表格
        # 1.首先创建一个光标对象
        qtc = self.qte.textCursor()
        # 3.插入表格格式
        tcf = QTextTableFormat()
        tcf.setAlignment(Qt.AlignRight)
        tcf.setHeight(30)
        tcf.setWidth(150)
        tcf.setCellPadding(1.1)
        tcf.setCellSpacing(0.1)
        tcf.setColumnWidthConstraints()
        # 2.通过光标插入文本,传入上面的格式对象
        # qtc.insertTable(2, 3)
        # qtc.insertTable(2, 3, tcf)  # 返回QTextTable,还可以追加后续操作,如下
        ttt = qtc.insertTable(2, 3, tcf)
        ttt.appendColumns(3)  # 追加3列


        # 插入文本快
        qtc = self.qte.textCursor()
        tcf = QTextBlockFormat()
        tcf.setAlignment(Qt.AlignRight)
        tcf.setRightMargin(50)

        tcf2 = QTextCharFormat()
        tcf2.setFontFamily('隶书')
        tcf2.setFontWeight(50)

        qtc.insertBlock(tcf,tcf2)
        self.qte.setFocus()

        # 插入框架
        qtc = self.qte.textCursor()
        tcf = QTextFrameFormat()
        tcf.setBorder(3)
        tcf.setRightMargin(20)
        qtc.insertFrame(tcf)

        # 获取最外层文本文档框架
        doc = self.qte.document()
        root_frame = doc.rootFrame()
        root_frame.setFrameFormat(tcf)






        # 文本光标设置合并格式
        # setBlockCharFormat
        # setBlockFormat
        # setCharFormat
        # mergeBlockCharFormat
        # mergeBlockFormat
        # mergeCharFormat

        qtc = self.qte.textCursor()
        tcf = QTextCharFormat()
        tcf.setFontPointSize(50)
        qtc.setBlockCharFormat(tcf)  # 设置块内字符格式

        # qtc.setBlockFormat(tcf)  # 设置块格式,传入对象QTextBlockFormat
        # qtc.setCharFormat(tcf)  # 设置选中字符格式,传入对象QTextCharFormat

        # 以下三个可以实现格式的合并,同时调用两种格式,接个172和173行测试
        # qtc.mergeBlockCharFormat(tcf)  # 合并当前块的字符格式,传入对象QTextCharFormat
        # qtc.mergeBlockFormat(tcf)  # 合并当前块格式,传入对象QTextBlockFormat

        tcf2 = QTextCharFormat()
        tcf2.setFontStrikeOut(True)
        # qtc.mergeCharFormat(tcf2)  # 合并当前字符格式,传入对象QTextCharFormat,上面设置好的格式和这段代码中设置的格式可以叠加展现



        # 获取内容和格式
        qtc = self.qte.textCursor()
        qtc.block() # 获取光标所在文本块
        qtc.block().text() # 获取光标所在文本块的文本内容
        qtc.block().blockNumber() # 获取光标所在文本块的段落编号

        # 文本的选中和清除
        qtc = self.qte.textCursor()
        # qtc.setPosition(3)
        # qtc.setPosition(3, QTextCursor.KeepAnchor)
        qtc.movePosition(QTextCursor.StartOfLine, QTextCursor.KeepAnchor, 1)
        qtc.select(QTextCursor.BlockUnderCursor)
        self.qte.setTextCursor(qtc)
        self.qte.setFocus()
        # 获取文本选中的内容
        qtc.selectedText() # 获取当前选中文本内容
        qtc.selection() # 获取当前选中文本文档
        qtc.selectedTableCells() # 获取当前选中表格
        # 选中位置获取
        qtc.selectionStart() # 获取光标起始和结束的位置
        qtc.clearSelection() # 取消选中文本,需要反向设置光标
        self.qte.setTextCursor(qtc) # 取消选中文本,需要反向设置光标
        # 选中文本移除
        qtc.removeSelectedText()

        # 删除内容,不必要选中
        qtc = self.qte.textCursor()
        qtc.deleteChar()  # 删除一个字符,光标后面的字符,如果有选中文本,直接删除选中文本
        qtc.deletePreviousChar()  # 删除一个字符,光标前面的字符,如果有选中文本,直接删除选中文本

        # 文本光标的位置获取
        qtc = self.qte.textCursor()
        qtc.atBlockEnd()  # 判断光标是否在段落结尾,相对于文本快
        qtc.atEnd()  # 判断光标是否在文档结尾,相对于文档
        qtc.columnNumber()  # 在第几列
        qtc.positionInBlock()  # 咋子文本快中的位置
        '''

        # 开始和结束编辑标识
        qtc = self.qte.textCursor()
        QTextCursor
        QTextCharFormat
        qtc.beginEditBlock()
        qtc.insertText('aaa')
        qtc.insertBlock()  # 类似于换行
        qtc.insertText('bbb')
        qtc.insertBlock()
        qtc.insertText('ccc')
        qtc.insertBlock()
        qtc.endEditBlock()
        qtc.insertText('ddd')
        qtc.insertBlock()

# ==============内容设置=============== # 代码分割线 - 结束

if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = Window()

    window.show()
    sys.exit(app.exec_())