QTextEdit 是 PyQt/PySide 框架中用于处理富文本内容的强大控件,它不仅支持纯文本编辑,还能处理 HTML、图片等复杂内容,是开发文本编辑器、日志查看器等应用的核心组件。
下面是一个创建 QTextEdit 并显示的基础案例,适合零基础入门:
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QTextEdit, QVBoxLayout, QWidget
# 创建应用程序
app = QApplication(sys.argv)
# 创建主窗口
window = QMainWindow()
window.setWindowTitle("QTextEdit 基础示例")
window.setGeometry(100, 100, 800, 600)
# 创建中央部件和布局
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
# 创建 QTextEdit 实例
text_edit = QTextEdit()
text_edit.setPlaceholderText("请在这里输入文本...") # 设置占位文本
# 将 QTextEdit 添加到布局中
layout.addWidget(text_edit)
# 设置中央部件
window.setCentralWidget(central_widget)
# 显示窗口
window.show()
# 进入应用程序主循环
sys.exit(app.exec_())
代码解读:
- 首先导入必要的模块,包括应用程序、主窗口和文本编辑控件
- 创建应用实例和主窗口,并设置基本属性(标题、大小)
- 使用垂直布局管理器(QVBoxLayout)来组织界面元素
- 实例化 QTextEdit 并设置占位文本(用户未输入时显示的提示)
- 将文本编辑框添加到布局中,再设置为窗口的中央部件
- 最后显示窗口并进入事件循环
# 设置文本内容(纯文本)
text_edit.setPlainText("这是一段纯文本内容")
# 设置文本内容(HTML格式)
text_edit.setHtml("这是HTML格式文本
可以包含加粗、斜体等样式
")
# 获取文本内容(纯文本)
plain_text = text_edit.toPlainText()
print("纯文本内容:", plain_text)
# 获取文本内容(HTML格式)
html_text = text_edit.toHtml()
print("HTML内容:", html_text)
from PyQt5.QtGui import QTextCursor, QFont, QColor
# 获取文本光标
cursor = text_edit.textCursor()
# 移动光标到文本末尾
cursor.movePosition(QTextCursor.End)
text_edit.setTextCursor(cursor)
# 在光标位置插入文本
cursor.insertText("新插入的文本")
# 选择文本(从当前位置向后选择10个字符)
cursor.movePosition(QTextCursor.StartOfLine) # 移动到行首
cursor.movePosition(QTextCursor.EndOfLine, QTextCursor.KeepAnchor) # 选择整行
text_edit.setTextCursor(cursor) # 显示选择
# 设置选中文本样式
font = QFont()
font.setBold(True)
font.setPointSize(12)
cursor.setFont(font)
cursor.setForeground(QColor("red"))
from PyQt5.QtGui import QTextBlockFormat, QTextCharFormat, QTextDocument
# 获取文档
document = text_edit.document()
# 设置段落格式(居中对齐)
block_format = QTextBlockFormat()
block_format.setAlignment(2) # 2 表示居中对齐
# 应用到当前段落
cursor = text_edit.textCursor()
cursor.setBlockFormat(block_format)
# 设置字符格式(字体、颜色等)
char_format = QTextCharFormat()
char_format.setFontFamily("微软雅黑")
char_format.setFontPointSize(14)
char_format.setForeground(QColor("blue"))
# 应用到选中文本
cursor = text_edit.textCursor()
cursor.mergeCharFormat(char_format)
# 文本变化时触发
text_edit.textChanged.connect(lambda: print("文本内容已改变"))
# 光标位置变化时触发
text_edit.cursorPositionChanged.connect(lambda: print("光标位置已改变"))
# 文本被修改时触发(与textChanged区别:用户主动修改时触发)
text_edit.modificationChanged.connect(lambda modified: print(f"文本修改状态:{'已修改' if modified else '未修改'}"))
# 回车键按下时触发
def on_return_pressed():
cursor = text_edit.textCursor()
cursor.insertText("\n[这是回车插入的标记]")
text_edit.returnPressed.connect(on_return_pressed)
下面是一个完整的简易文本编辑器案例,包含文件操作、格式设置等功能:
import sys
from PyQt5.QtWidgets import (QApplication, QMainWindow, QTextEdit, QVBoxLayout,
QWidget, QMenuBar, QMenu, QAction, QToolBar, QColorDialog,
QFontDialog, QFileDialog, QMessageBox)
from PyQt5.QtGui import QIcon, QColor, QFont, QTextCursor, QTextCharFormat, QTextBlockFormat
from PyQt5.QtCore import Qt
class SimpleTextEditor(QMainWindow):
def __init__(self):
super().__init__()
self.initUI()
self.filename = None # 文件名
def initUI(self):
# 设置窗口基本属性
self.setWindowTitle("简易文本编辑器")
self.setGeometry(100, 100, 900, 700)
# 创建中央部件和布局
central_widget = QWidget()
layout = QVBoxLayout(central_widget)
# 创建文本编辑框
self.text_edit = QTextEdit()
self.text_edit.setAcceptRichText(True) # 启用富文本编辑
layout.addWidget(self.text_edit)
# 设置中央部件
self.setCentralWidget(central_widget)
# 创建菜单栏和工具栏
self.create_menu()
self.create_toolbar()
# 显示窗口
self.show()
def create_menu(self):
# 创建菜单栏
menu_bar = self.menuBar()
# 文件菜单
file_menu = menu_bar.addMenu("文件")
# 新建文件动作
new_action = QAction("新建", self)
new_action.setShortcut("Ctrl+N") # 设置快捷键
new_action.triggered.connect(self.new_file) # 连接槽函数