【Python】PyQt5 中富文本框 QTextEdit 的详细教程与应用实战

在 PyQt5 中,QTextEdit 是一个非常强大的组件,用于编辑和显示富文本(Rich Text)。通过 QTextEdit,开发者可以实现复杂的文本编辑功能,例如多样的文本格式、插入图片、支持超链接、设置样式等。本文将详细介绍如何在 PyQt5 中使用 QTextEdit,并通过一些实际案例展示其应用。

1. QTextEdit 简介

QTextEdit 是 PyQt5 中的一个小部件,用于显示和编辑富文本(包括格式化文本、图像、表格等)。QTextEdit 提供了非常丰富的功能,可以用来实现文本编辑器、聊天窗口、代码编辑器等。

2. 基本功能

  • 多行文本编辑QTextEdit 可以处理多行文本输入,支持换行、缩进等功能。
  • 富文本支持:支持通过 HTML 或富文本格式(RTF)来显示文本,可以设置不同的字体、颜色、样式。
  • 插入图片和超链接:可以插入图片、创建超链接等。
  • 撤销与重做:可以通过菜单和快捷键实现撤销、重做操作。
  • 设置文本格式:可以设置字体、颜色、背景、对齐方式等。

3. QTextEdit 基本使用

3.1 创建简单的 QTextEdit

下面是一个简单的 PyQt5 窗口,里面包含一个 QTextEdit 用于文本编辑。

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTextEdit, QVBoxLayout

class App(QWidget):
    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        # 创建QTextEdit实例
        self.text_edit = QTextEdit(self)

        # 设置初始文本
        self.text_edit.setText("Hello, PyQt5!")

        # 设置文本编辑区域的字体
        self.text_edit.setFontPointSize(12)

        # 设置布局
        layout = QVBoxLayout()
        layout.addWidget(self.text_edit)
        self.setLayout(layout)

        self.setWindowTitle('QTextEdit 示例')
        self.setGeometry(100, 100, 600, 400)
        self.show()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

功能:创建一个窗口,窗口内包含一个 QTextEdit 组件,显示默认文本 “Hello, PyQt5!”。

3.2 设置富文本

QTextEdit 默认是富文本编辑框,你可以使用 HTML 来格式化文本,例如设置字体、颜色、粗体等。

self.text_edit.setHtml("<h1>PyQt5 QTextEdit</h1><p><b>This is bold text</b></p><p><i>This is italic text</i></p>")

这段代码会将文本设置为带有 HTML 格式的文本,其中包含一个标题和加粗、斜体的段落。

3.3 获取文本内容

可以使用 toPlainText() 方法来获取纯文本内容,使用 toHtml() 获取 HTML 格式的文本。

plain_text = self.text_edit.toPlainText()
html_text = self.text_edit.toHtml()

4. QTextEdit 常用操作

4.1 插入图片

通过 QTextEdit 插入图片非常简单,可以使用 insertHtml() 方法来插入图片。

html_text = '<img src="path_to_image.jpg" width="200" height="150">'
self.text_edit.insertHtml(html_text)

这段代码将会在文本中插入一张图片,图片的路径是 path_to_image.jpg

4.2 插入超链接

插入超链接也非常简单,使用 insertHtml() 或 setHtml() 方法可以实现。

html_text = '<a href="http://www.example.com">Click here</a>'
self.text_edit.insertHtml(html_text)

点击超链接时,会自动在浏览器中打开链接。

4.3 设置文本颜色和背景

使用 QTextCharFormat 可以设置文本的颜色、字体、背景等格式。

from PyQt5.QtGui import QTextCharFormat, QColor

fmt = QTextCharFormat()
fmt.setForeground(QColor('red'))  # 设置文本颜色为红色
fmt.setBackground(QColor('yellow'))  # 设置文本背景色为黄色

# 设置选中文本的格式
cursor = self.text_edit.textCursor()
cursor.mergeCharFormat(fmt)

这段代码会将选中的文本颜色设置为红色,背景色设置为黄色。

4.4 撤销和重做

QTextEdit 默认支持撤销和重做操作。你可以通过 undo() 和 redo() 方法来手动触发这些操作。

self.text_edit.undo()  # 撤销操作
self.text_edit.redo()  # 重做操作

4.5 字体设置

你可以通过 setFont 方法来设置文本的字体、大小等属性。

from PyQt5.QtGui import QFont

font = QFont("Arial", 12)
self.text_edit.setFont(font)  # 设置字体为 Arial,大小为 12

4.6 设置文本对齐方式

QTextEdit 支持对齐操作,可以设置文本左对齐、右对齐或居中对齐。

# 设置文本居中
self.text_edit.setAlignment(Qt.AlignCenter)

# 设置文本左对齐
self.text_edit.setAlignment(Qt.AlignLeft)

# 设置文本右对齐
self.text_edit.setAlignment(Qt.AlignRight)

5. QTextEdit 高级应用

5.1 设置工具栏进行文本格式化

你可以通过自定义工具栏来实现文本格式化功能,比如加粗、斜体、字体颜色等。

from PyQt5.QtWidgets import QToolBar, QAction
from PyQt5.QtCore import Qt

def create_toolbar(self):
    toolbar = QToolBar(self)
    
    bold_action = QAction("Bold", self)
    bold_action.triggered.connect(self.toggle_bold)
    toolbar.addAction(bold_action)
    
    self.addToolBar(toolbar)

def toggle_bold(self):
    cursor = self.text_edit.textCursor()
    fmt = cursor.charFormat()
    
    if fmt.fontWeight() == QFont.Bold:
        fmt.setFontWeight(QFont.Normal)
    else:
        fmt.setFontWeight(QFont.Bold)
    
    cursor.mergeCharFormat(fmt)
    self.text_edit.setTextCursor(cursor)

功能:这里通过添加一个工具栏,允许用户点击按钮来切换文本的加粗格式。

5.2 使用 QTextEdit 编辑 HTML

如果你需要直接编辑 HTML,可以通过 setHtml() 方法设置 HTML 内容。你可以使用这种方式来快速构建具有复杂格式的文本内容。

html_content = """
<h2>Welcome to PyQt5</h2>
<p>This is a <b>bold</b> paragraph and this is an <i>italic</i> paragraph.</p>
"""
self.text_edit.setHtml(html_content)

这样可以直接展示带有 HTML 标签的文本,允许用户进行更复杂的格式设置。

6. QTextEdit 与其他小部件的组合使用

在实际应用中,QTextEdit 经常与其他小部件组合使用,例如文本输入框、按钮、菜单等。例如,可以通过按钮的点击事件来插入图片、超链接等。

from PyQt5.QtWidgets import QPushButton

# 创建按钮
insert_button = QPushButton("Insert Image", self)
insert_button.clicked.connect(self.insert_image)
layout.addWidget(insert_button)

def insert_image(self):
    html_text = '<img src="path_to_image.jpg" width="200" height="150">'
    self.text_edit.insertHtml(html_text)

7. 总结

  • QTextEdit 是 PyQt5 中非常强大的文本编辑组件,支持富文本格式、图片插入、超链接、字体和样式设置等功能。
  • 你可以使用 QTextEdit 创建简单的文本编辑器,也可以通过组合工具栏、菜单等其他组件,打造更加复杂的编辑应用。
  • 本文通过多个实例展示了如何在 PyQt5 中使用 QTextEdit,并结合具体应用场景,帮助你理解如何灵活使用这个组件。

希望通过这篇教程,你能掌握 QTextEdit 的基本使用方法,创建属于自己的文本编辑应用!